首页 > 解决方案 > 根据另一个布尔数组屏蔽 numpy 数组以选择特定行

问题描述

假设我有一个这样的数组:

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循环来做到这一点的解决方案?

先感谢您

标签: pythonarraysnumpymasking

解决方案


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

my_arr[[0,1,1]]

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

my_arr[mask_arr.astype('bool')]

1将提取与in对应的行mask_arr


推荐阅读