Numpy提取值沿给定点的维度

时间:2016-01-08 19:03:30

标签: python arrays numpy

假设我有一个(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]。原因是我正在使用的数组有很多维度,写出索引会使代码无法读取。

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))
相关问题