给定索引数组idx
仅包含0和1个元素,1表示感兴趣的样本索引,以及样本数组A
(A.shape[0] = idx.shape[0]
)。这里的目标是基于索引向量提取样本子集。
在matlab中,这样做很简单:
B = A(idx,:) %assuming A is 2D matrix and idx is a logical vector
如何以简单的方式在Python中实现这一目标?
答案 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)]