假设我有一个(N0,N1,N2,N3,...)维度ndarray A.我希望数组中的所有点都是维度0,对于给定的索引x1,x2,x3 ...维度为1 ,2,3等等。所有索引x都存储在列表l中。所以我想要的是
A[:, l[0], l[1], ...]
但是,我想在没有明确写出列表元素的情况下这样做?我正在寻找像
这样的功能 A[:, *l]
。
这是三维案例的一个例子。
> a = np.arange(8).reshape(2,2,2)
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
假设l = [0,0]。我想得到
> a[:,l[0],l[1]]
array([0, 4])
没有写出l [0],l [1]。原因是我正在使用的数组有很多维度,写出索引会使代码无法读取。
答案 0 :(得分:1)
如果我理解你的目标,我就会建立一个元组。
A[(slice(None),)+tuple(ll)]
e.g。
In [121]: A=np.ones((2,3,4,5))
In [122]: ll=[1,2,3]
In [123]: A[:,1,2,3]
Out[123]: array([ 1., 1.])
In [124]: (slice(None),)+tuple(ll)
Out[124]: (slice(None, None, None), 1, 2, 3)
In [125]: A[(slice(None),)+tuple(ll)]
Out[125]: array([ 1., 1.])
有一些帮助函数和类可以促进这样的事情(ix_
,r_
等),但这一切都归结为创建一个元组,将传递给:{{ 1}}
A.__getitem__(*atuple)
有助手:
A[i,j,k] <=> A[(i,j,k)] <=> A.__getitem__((i,j,k))