基于另一个布尔数组,将 numpy 数组屏蔽为 select 特定行

Masking numpy arrays to select specific rows, based on another boolean array

假设我有这样一个数组:

my_arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

或像这样的二维数组:

my_arr = np.array([[1, 1, 11], [2, 1, 0], [3, 3, -1], ..., [10, 9, 0]])

然后我定义了一个数组

mask_arr = ([1, 1, 0, 0, 1, 0, 1, 1, 0, 1])

我想从掩码数组中得到一个新的数组,它是由行组成的,其中它们的索引mask_arr,元素等于“1”。

例如,第一个数组的结果如下:

[1, 2, 0, 0, 5, 0, 7, 8, , 10]

我试过了

my_arr[my_mask]

但是没有用。有没有不想写一个for循环来做到这一点的解决方案?

提前致谢

你的 mask_arr 看起来像整数类型,当你用整数数组切片时,数组被视为索引。所以

my_arr[[0,1,1]]

会给你[row0,row1,row1]。正如您提到的,您想将 mask_arr 视为布尔值,然后您可以将其转换为布尔值:

my_arr[mask_arr.astype('bool')]

将提取与 mask_arr 中的 1 对应的行。