如何在python中访问切片对象的元素

时间:2016-04-06 18:48:46

标签: python numpy scipy

我正在使用scipy.ndimage.label和scipy.ndimage.find_objects来查找图片中的内容。它返回一个切片数组。我试图从切片中获取对象的坐标,但似乎无法找到进入切片对象的方法。这是一个简单的例子:

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。我认为指数会让我在路上,但我不理解它的行为。

1 个答案:

答案 0 :(得分:5)

您在寻找startstopstep属性吗?

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

slice.indices计算将为具有输入长度的iterable访问的索引的开始/停止/步骤。所以,

>>> 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