【发布时间】:2021-08-30 20:22:01
【问题描述】:
我有一个 2D numpy 数组,如下所示:
a = np.array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
还有一个如下所示的一维列表:
b = [4, 3, 2, 3, 4]
我想根据给定行中的哪些值小于我的一维列表 (b) 中的相应值来屏蔽我的二维数组 (a)。例如,根据该行中的哪些值小于 b[0] 处的值,将屏蔽 a[0] 行;与行 a[1] 和 b[1] 处的值相同,依此类推...
我希望得到的是一个二维布尔数组:
mask_bools = [[True, True, True, True, False],
[True, True, True, False, False],
[True, True, False, False, False],
[True, True, True, False, False],
[True, True, True, True, False]]
我有一个愚蠢的方法来实现这个循环:
mask_bools = []
for i in range(len(b)):
mask_bools.append(np.ma.masked_less(a[i], b[i]).mask)
mask_bools = np.array(mask_bools)
但我觉得必须有更好/更快的方法来做到这一点,从而更好地利用 numpy 功能。有任何想法吗?谢谢!
【问题讨论】:
标签: python arrays numpy masking