通过布尔掩码数组选择numpy数组的元素

Joh*_*Doe 34 python indexing boolean numpy mask

我猜答案即将到来,但我看不到它:-(

我有一个长度为n的布尔掩码数组:

a = np.array([True, True, True, False, False])
Run Code Online (Sandbox Code Playgroud)

我有一个带有n列的二维数组:

b = np.array([[1,2,3,4,5], [1,2,3,4,5]])
Run Code Online (Sandbox Code Playgroud)

我想要一个只包含"True"值的新数组,例如:

c = ([[1,2,3], [1,2,3]])
Run Code Online (Sandbox Code Playgroud)

a 不起作用,因为它包含我不想要的假列的"0"

c = np.delete(b, a, 1) does not work
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢!

DSM*_*DSM 43

你可能想要这样的东西:

>>> a = np.array([True, True, True, False, False])
>>> b = np.array([[1,2,3,4,5], [1,2,3,4,5]])
>>> b[:,a]
array([[1, 2, 3],
       [1, 2, 3]])
Run Code Online (Sandbox Code Playgroud)

请注意,此类型的索引来工作的,它需要一个ndarray像你正在使用,而不是一个list,或者它会解释False,并True01,给你的那些列:

>>> b[:,[True, True, True, False, False]]   
array([[2, 2, 2, 1, 1],
       [2, 2, 2, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

  • 我用过这个解决方案,效果很好!但是在扩展到形状`(2800000,600)`的`ndarray`时,尝试使用具有'200``True`值的掩码是缓慢的.有什么优化吗? (3认同)