当len<时,使用元组(或列表)索引numpy数组。 NDIM?

时间:2014-12-18 21:47:01

标签: python arrays numpy indexing

我有一个3d numpy数组,例如:

>>> A = np.arange(24).reshape(2,3,4)

我想根据轴1和2的一对坐标沿轴0​​取1d切片:

>>> h = 1
>>> l = 2
>>> A[:,h,l]
array([ 6, 18])

到目前为止一切顺利。但是如果我的坐标对存储为元组或列表而不是两个整数呢?我尝试了一些明显的选择,但无济于事:

>>> coords = (1,2)
>>> A[coords]
array([20, 21, 22, 23])
>>> A[:,coords]
array([[[ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[16, 17, 18, 19],
        [20, 21, 22, 23]]])
>>> A[...,coords]
array([[[ 1,  2],
        [ 5,  6],
        [ 9, 10]],

       [[13, 14],
        [17, 18],
        [21, 22]]])

我已经搜索过这个并没有找到任何内容,但完全有可能我没有用适当的术语搜索。所以,如果这是一个过于简单化的问题,请道歉!

1 个答案:

答案 0 :(得分:3)

您可以直接构造切片元组,例如:

In [11]: A[(slice(None),) + coords]
Out[11]: array([ 6, 18])

这是因为调用A[:, 1, 2]是等效/调用:

In [12]: A.__getitem__((slice(None, None, None), 1, 2))
Out[12]: array([ 6, 18])