根据另一个0/1索引数组从numpy数组中提取值

时间:2018-01-14 23:38:55

标签: python arrays numpy

给定索引数组idx仅包含0和1个元素,1表示感兴趣的样本索引,以及样本数组AA.shape[0] = idx.shape[0])。这里的目标是基于索引向量提取样本子集。

在matlab中,这样做很简单:

B = A(idx,:) %assuming A is 2D matrix and idx is a logical vector

如何以简单的方式在Python中实现这一目标?

2 个答案:

答案 0 :(得分:3)

如果掩码数组idx具有与数组A相同的形状,那么如果将idx转换为布尔数组,则应该能够提取掩码指定的元素,使用astype

演示 -

>>> A
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
>>> idx
array([[1, 0, 0, 1, 1],
       [0, 0, 0, 1, 0],
       [1, 0, 0, 1, 1],
       [1, 0, 0, 1, 1],
       [0, 1, 1, 1, 1]])

>>> A[idx.astype(bool)]
array([ 0,  3,  4,  8, 10, 13, 14, 15, 18, 19, 21, 22, 23, 24])

答案 1 :(得分:0)

使用bool操作等同于Matlab中的逻辑操作:

B = A[idx.astype(bool)]