有没有办法在不使用for循环的情况下为numpy数组中的各个行创建numpy掩码?
示例:如果行的非零值超过零,请应用True掩码
给定输入:array = [[0,0],[0,1],[0,2],[0,0]]
预期输出:mask = [False,True,True,False]
编辑:
import numpy as np
a = np.array([[0,0],[0,1],[0,2],[0,0]])
mask = []
num_nonzero_specified = 0
a_len = len(a[0])
for b in a:
if np.count_nonzero(b) > num_nonzero_specified:
mask.append([True] * a_len)
else:
mask.append([False] * a_len)
masked_array = np.ma.MaskedArray(a,mask=mask)
我的目标是知道是否有更快的上述代码实现,这允许我使用多个不同的值来表示非零元素的数量。
答案 0 :(得分:2)
这可以通过numpy本身来实现。但你必须要思考一下。
首先,你需要写出自己的状况并观察你会得到什么。例如:
>>> print(array>0)
[[False False]
[False True]
[False True]
[False False]]
然后你应该找到一个汇总结果的方法。对于此任务,聚合方法任何是最佳方法。它与内置的任何一样有效,但您可以明确指定要聚合的轴。例如:
>>> print((array>0).any(axis=1))
[False True True False]
所以问题的答案是:mask = (array>0).any(axis=1)