2016-04-06 3 views
2

Я использую scipy.ndimage.label и scipy.ndimage.find_objects для поиска вещей на изображении. Он возвращает массив срезов. Я пытаюсь получить координаты объекта из среза, но не может найти способ попасть внутрь объекта среза. Вот простой пример:Как получить доступ к элементам объекта slice в python

a = 1 
b = 2 
c = 13 
d = 47 
j = slice(a,b,None) 
k = slice(c,d,None) 
x = (j, k) 

print(x) 
print(x[0]) 
print(x[0].indices(2)) 
print(x[1].indices(2)) 

Выход:

(slice(1, 2, None), slice(13, 47, None)) 
slice(1, 2, None) 
(1, 2, 1) 
(2, 2, 1) 

В основном я ищу возможность получить значения для а, Ь, с и й, если я только учитывая ломтик кортежа x. Я думал, что индексы меня пойдут, но я не понимаю, как это походит.

ответ

3

Вы ищете start, stop и step свойства?

>>> s = slice(1, 2, 3) 
>>> s.start 
1 
>>> s.stop 
2 
>>> s.step 
3 

slice.indices вычисляет старт/стоп/шаг для индексов, которые бы быть доступны для итератора с длиной входного сигнала. Таким образом,

>>> s = slice(-1, None, None) 
>>> s.indices(30) 
(29, 30, 1) 

Это означает, что вы должны взять товар 29 из итерируемого. Это может быть удобно в сочетании с xrange (или range):

for item in range(*some_slice.indices(len(sequence))): 
    print(sequence[item]) 

В качестве конкретного примера:

>>> a = range(30) 
>>> for i in a[-2:]: 
... print(i) 
... 
28 
29 
>>> s = slice(-2, None, None) 
>>> for ix in range(*s.indices(len(a))): 
... print(a[ix]) 
... 
28 
29 
+0

Да это было начало, остановка, шаг атрибуты я искал. Благодарю вас! Google-fu терпит неудачу, когда условия настолько распространены (например, срез). – DaveH

+0

@DaveH - Когда Google не удается вам, вы всегда можете попробовать встроенную 'help':' help (slice) '. Это, по крайней мере, перечисляет дескрипторы данных 'start',' stop', 'step' ... – mgilson

+0

Есть ли способ конвертировать срезы (со всеми предметами (-ами) среза), чтобы они содержали большой numpy.array? – trblnc

Смежные вопросы