如何用零替换数组中的所有负数[重复]

Posted

技术标签:

【中文标题】如何用零替换数组中的所有负数[重复]【英文标题】:How to replace all negative numbers in an array with zero [duplicate] 【发布时间】:2017-04-22 13:38:40 【问题描述】:

如果我有一个 NxN numpy 数组,并且任何位置都有一个负数,有没有一种简单快捷的方法可以用 0 替换该数字? 像

for item in array:
    if item <= 0: 
        item = 0

【问题讨论】:

array[array &lt;= 0 ] = 0 应该也有效,你说是否定的,不应该是 array[array &lt; 0] = 0 而不是 &lt;=0 @EdChum ...这没什么区别,因为您最终将0 替换为0。唯一的区别可能是如果数组有floats 和一些0 有“负号”而其他有正号,通过分配0 你将它们全部设置为“正号”,但我相信所有的操作都应该是一样的。 @Bakuriu 是的,但&lt;0&lt;=0 之间存在语义差异,无论最终结果如何,都带有否定语句,很明显&lt;0 表示否定,而&lt;=0 没有 提供的代码有什么问题? (从未使用过 numpy,所以我可能会问一个愚蠢的问题) @WhatsThePoint 它不是矢量化的,是将元素设置为 0 的最有效方法,如果你有一个大数组,那么在这种情况下你最终会遍历每一行,而使用掩码将设置整个向量化的数组 【参考方案1】:

您可以使用布尔掩码来屏蔽整个数组,这将比您当前的迭代效率高得多:

In [41]:
array = np.random.randn(5,3)
array

Out[41]:
array([[-1.09127791,  0.51328095, -0.0300959 ],
       [ 0.62483282, -0.78287353,  1.43825556],
       [ 0.09558515, -1.96982215, -0.58196525],
       [-1.23462258,  0.95510649, -0.76008193],
       [ 0.22431534, -0.36874234, -1.46494516]])

In [42]:
array[array < 0] = 0
array

Out[42]:
array([[ 0.        ,  0.51328095,  0.        ],
       [ 0.62483282,  0.        ,  1.43825556],
       [ 0.09558515,  0.        ,  0.        ],
       [ 0.        ,  0.95510649,  0.        ],
       [ 0.22431534,  0.        ,  0.        ]])

【讨论】:

【参考方案2】:

基于this SO answer,您可以为此使用numpy 的内置索引。

arr[arr < 0] = 0

【讨论】:

这个答案和我的有什么不同? 我在发帖时没有看到您的回答。我不会删除我的,因为它添加了一些新内容,这是包含解释和基准测试的参考。不过别担心,我赞成你的,我认为它应该是第一个选择的答案。 我没有重复答案的问题,只要它增加了一些新的东西,如果您将相关部分添加到您的答案中而不是只是一个链接,只是一个观察结果会更好跨度>

以上是关于如何用零替换数组中的所有负数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何用数字中的点替换逗号(或任何替换)[重复]

如何用熊猫(python)中的其他值替换NAN [重复]

如何用 sed 替换缩小的 javascript 文件中的多个值 [重复]

如何用另一个数组值替换javascript中的数组值?

在 Ruby 中,如何用可能的多个元素替换数组中的元素?

如何用ruby中的数组中的元素替换字符串中的单词?