2016-04-06 60 views
2

我正在使用scipy.ndimage.label和scipy.ndimage.find_objects查找圖像中的東西。它返回一個切片數組。我試圖從對象中獲取對象的座標,但似乎無法找到切入對象的方法。下面是一個簡單的例子:如何訪問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) 

基本上我找得到的值的a,b,c和d的能力,如果我只給了片元組x。我認爲指數會讓我走上前進的道路,但我並不瞭解它的行爲。

回答

3

您是否在尋找startstopstep的房產嗎?

>>> 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 - 當谷歌失敗時,你可以隨時嘗試內置'help':'help(slice)'。至少列出了數據描述符'start','stop','step' ...... – mgilson

+0

有什麼方法可以將切片(包含它們包含的所有切片對象)轉換爲大numpy.array? – trblnc