如何用零替换数组中的所有负数[重复]
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 <= 0 ] = 0
应该也有效,你说是否定的,不应该是 array[array < 0] = 0
而不是 <=0
?
@EdChum ...这没什么区别,因为您最终将0
替换为0
。唯一的区别可能是如果数组有float
s 和一些0
有“负号”而其他有正号,通过分配0
你将它们全部设置为“正号”,但我相信所有的操作都应该是一样的。
@Bakuriu 是的,但<0
和<=0
之间存在语义差异,无论最终结果如何,都带有否定语句,很明显<0
表示否定,而<=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
【讨论】:
这个答案和我的有什么不同? 我在发帖时没有看到您的回答。我不会删除我的,因为它添加了一些新内容,这是包含解释和基准测试的参考。不过别担心,我赞成你的,我认为它应该是第一个选择的答案。 我没有重复答案的问题,只要它增加了一些新的东西,如果您将相关部分添加到您的答案中而不是只是一个链接,只是一个观察结果会更好跨度>以上是关于如何用零替换数组中的所有负数[重复]的主要内容,如果未能解决你的问题,请参考以下文章