Numpy Mask使用np.count_非零()单个行

2024-03-29 01:46:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以在不使用for循环的情况下为numpy数组中的各个行创建numpy掩码?在

示例:如果行的非零值超过零,则应用真掩码

给定输入: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)

我的目标是了解上面的代码是否有更快的实现,这允许我对非零元素的数量使用多个不同的值。在


Tags: 方法numpyfalsetrueforlennp情况
1条回答
网友
1楼 · 发布于 2024-03-29 01:46:21

这可能是纽比自己做的。但你得想一想。在

首先,你需要写下你的情况,观察你会得到什么。例如:

>>> print(array>0)
[[False False]
 [False  True]
 [False  True]
 [False False]]

然后你应该找到一个方法来汇总你的结果。对于此任务,聚合方法任何是最佳方法。它的工作原理与builtin的any一样有效,但是您可以显式地指定要聚合的轴。例如:

^{pr2}$

所以你问题的答案是:mask = (array>0).any(axis=1)

相关问题 更多 >