我想创建一个包含索引的列表,这些索引将用于从另一个列表中获取元素。
一个简单的案例:
A = [5,6,7,8,9,10]
b = 2:4
我想做一些像
这样的事情C = A[b]
这就像说C = A [2:4]
我想稍后将其扩展到多维数组,例如b = [2:4,5:6],我可以简单地调用A [b]从A中提取多维数组。
答案 0 :(得分:19)
您可以将b
定义为slice
对象来实现此目的:
In[9]:
A = [5,6,7,8,9,10]
b = slice(2,4)
A[b]
Out[9]: [7, 8]
关于你的其他要求,我认为如果你创建一个包含2个slice
个对象的列表对象,那么它应该达到你想要的效果:
In[18]:
import numpy as np
a = np.arange(100).reshape(10,10)
b = [slice(1,3), slice(3,4)]
a[b]
Out[18]:
array([[13],
[23]])
答案 1 :(得分:11)
您可以使用例如直接python切片:
>>> A = [5,6,7,8,9,10]
>>> b = slice(2,4)
>>> A[b]
[7, 8]
但这并不能很好地扩展到nd-arrays。要做到这一点,我建议使用numpy的np.s_
函数,该函数完全符合您的要求,而无需为每个轴明确构造slice
。
>>> b = np.s_[2:4]
>>> A[b]
[7, 8]
这很好地延伸到例如2d阵列:
>>> A = np.ones(10, 10)
>>> b = np.s_[2:4, 5:6]
>>> A[b]
array([[ 1.],
[ 1.]])