Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 索引值为字符串的切片列表?_Python_List_Int_Concatenation_Slice - Fatal编程技术网

Python 索引值为字符串的切片列表?

Python 索引值为字符串的切片列表?,python,list,int,concatenation,slice,Python,List,Int,Concatenation,Slice,我已经加载了一个黑白图像作为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[list

我已经加载了一个黑白图像作为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]
但这不起作用,因为我无法连接这些值。有没有办法做到这一点?

切片是语法,而不是字符串。见:

切片的语义如下所示。使用与普通订阅相同的_getitem _方法对主订阅进行索引,并使用从切片列表构造的键,如下所示。如果切片列表包含至少一个逗号,则键是包含切片项转换的元组;否则,单个切片项的转换是关键。作为表达式的切片项的转换就是该表达式。正确切片的转换是一个切片对象,参见第节,其开始、停止和步骤属性分别是作为下限、上限和跨步给出的表达式的值,用无替换缺少的表达式

我的

通过直接创建切片对象,可以绕过从切片语法到切片对象的转换;如果需要,可以将它们放入元组中

所以

相当于

box = slice(160, 300), slice(28, 43)
numpy_array_to_slice[box]
我省略了step参数;省略时默认为无

将此扩展到您的列表将是:

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]
切片是语法,而不是字符串。见:

切片的语义如下所示。使用与普通订阅相同的_getitem _方法对主订阅进行索引,并使用从切片列表构造的键,如下所示。如果切片列表包含至少一个逗号,则键是包含切片项转换的元组;否则,单个切片项的转换是关键。作为表达式的切片项的转换就是该表达式。正确切片的转换是一个切片对象,参见第节,其开始、停止和步骤属性分别是作为下限、上限和跨步给出的表达式的值,用无替换缺少的表达式

我的

通过直接创建切片对象,可以绕过从切片语法到切片对象的转换;如果需要,可以将它们放入元组中

所以

相当于

box = slice(160, 300), slice(28, 43)
numpy_array_to_slice[box]
我省略了step参数;省略时默认为无

将此扩展到您的列表将是:

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]
您应该使用切片实例或其元组的列表,而不是字符串

这里有一个例子

>>> 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]])
在这种情况下,[listofindexvalues[0]]相当于[1:6,3:4]

>>> a[1:6, 3:4]
array([[13],
       [23],
       [33],
       [43],
       [53]])
您应该使用切片实例或其元组的列表,而不是字符串

这里有一个例子

>>> 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]])
在这种情况下,[listofindexvalues[0]]相当于[1:6,3:4]

>>> a[1:6, 3:4]
array([[13],
       [23],
       [33],
       [43],
       [53]])

即使我阅读了文档,我也不确定我是否会那么容易理解它。再次感谢,太好了!即使我阅读了文档,我也不确定我是否会那么容易理解它。再次感谢,太好了!