我已将黑白图像加载为numpy数组。数组形状等于图像中的像素。我想提取某些范围的像素值,例如,
numpy_array_to_slice[160:300,28:43]
等等,但我不想硬编码索引号。相反,我想从值列表中加载索引值。例如,我有一个索引值列表,如:
listofindexvalues = [['160:300,28:43'],['160:300,40:55'],['160:300,28:43']]
如此有效我想要的东西:
numpy_array_to_slice[listofindexvalues[0]]
代替:
numpy_array_to_slice['160:300,28:43']
我尝试过各种不起作用的东西:
first,second = str(index_list[19]).replace('[','').replace(']','').replace('\'','').split(':') ##for just one side of an index value, such as 28:59
并试图像这样传递:
numpy_array_to_slice[int(first)+':'+int(second]
但这不起作用,因为我无法连接这些值。有没有办法实现这个目标?
答案 0 :(得分:5)
切片是语法,而不是字符串。请参阅Slicings expressions reference documentation:
切片的语义如下。使用从切片列表构造的密钥对主数据库进行索引(使用与正常预订相同的
__getitem__()
方法),如下所示。 如果切片列表包含至少一个逗号,则该键是包含切片项转换的元组;否则,单个切片项的转换是关键。作为表达式的切片项的转换是该表达式。 正确切片的转换是slice
对象(请参阅The standard type hierarchy部分),其start
,stop
和step
属性是分别以下限,上限和步幅给出的表达式,用None
代替缺失的表达式。
大胆强调我的。
您可以通过直接创建slice()
个对象来绕过此转换(从切片语法到slice()
个对象);如果需要,你可以把它们放在元组中。
所以
numpy_array_to_slice[160:300,28:43]
相当于
box = slice(160, 300), slice(28, 43)
numpy_array_to_slice[box]
我省略了step
参数;省略时默认为None
。
将此扩展到您的列表将是:
listofindexvalues = [
(slice(160, 300), slice(28, 43)),
(slice(160, 300), slice(40, 55)),
(slice(160, 300), slice(28, 43))
]
for box in listofindexvalues:
sliced_array = numpy_array_to_slice[box]
答案 1 :(得分:1)
您应该使用slice
实例(或其元组)的列表,而不是字符串。
以下是一个例子。
>>> import numpy as np
>>>
>>> listofindexvalues = [(slice(1, 6), slice(3, 4))]
>>> a = np.arange(100).reshape(10,10)
>>> a[listofindexvalues[0]]
array([[13],
[23],
[33],
[43],
[53]])
在这种情况下, a[listofindexvalues[0]]
相当于a[1:6, 3:4]
。
>>> a[1:6, 3:4]
array([[13],
[23],
[33],
[43],
[53]])