使用索引提取值数组

时间:2016-04-02 23:17:06

标签: python arrays numpy indices

我需要从多维数组中提取某些不是后续数据的值。

import numpy as np    
A = np.array([[[ 0.,          4.,          0.        ],
               [ 0.19230769,  4.03846154,  0.        ],
               [-0.4,         4.8,         0.        ],
               [ 2.,          1.,          0.        ]],

              [[ 1.2,         3.4,         0.        ],
               [ 2.11538462,  4.42307692,  0.        ],
               [ 0.,          4.,          0.        ],
               [ 3.6,         1.8,         0.        ]],

              [[ 1.8,         3.1,         0.        ],
               [ 3.17307692,  4.63461538,  0.        ],
               [ 0.,          4.,          0.        ],
               [ 4.,          2.,          0.        ]]])

对于每个4x3块,我想提取任意行

例如以下元素:

A[0,2,:]
A[1,1,:]
A[2,1,:]

基本上是行B = [2,1,1],它会给我:

[-0.4         4.8         0.        ]
[ 2.11538462  4.42307692  0.        ]
[ 3.17307692  4.63461538  0.        ]

如何有效地做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用"advanced indexing"

In [99]: A[[0,1,2], [2,1,1], :]
Out[99]: 
array([[-0.4       ,  4.8       ,  0.        ],
       [ 2.11538462,  4.42307692,  0.        ],
       [ 3.17307692,  4.63461538,  0.        ]])

这里的索引数组是

ind1 = [0, 1, 2]
ind2 = [2, 1, 1]

并且ind1正在索引A的第一个轴,而ind2正在索引第二个轴,第三个轴正在完全切片(使用:),结果数组result具有与ind1ind2相同的形状 - 即(3,) - 加上完全切片轴的形状,也是{{ 1}}。因此,(3,)result.shape

(3, 3)

代表result[i, j] = A[ind1[i], ind2[i], j] i = 0,1,2