2016-12-07 30 views
3

如果我有一个NxN numpy数组,并且如果有负数作为任何位置,是否有一种简单而快速的方法,我可以用0替换该数字? 像如何用0替换数组中的所有负数

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

'阵列[阵列<= 0] 0' =还应你说负工作,不应该它是'阵列[阵列<0] = 0'而非'<= 0'? – EdChum

+0

@EdChum ...它没有什么不同,因为你最终用'0'代替了'0'。唯一的区别可能是,如果数组有'浮动',有些'0'有'负号',而另一些有正号,通过将'0'分配给所有'正号',相信所有的操作应该都是一样的。 – Bakuriu

+0

@Bakuriu true,但是在<<0'和'<= 0'之间存在语义上的差异,而不考虑最终结果,否则很明显'<0'表示负数,而<<= 0'不表示 – EdChum

回答

6

可以屏蔽通过使用布尔面具整个数组,这将是比迭代像你更有效当前是:

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 
+1

这个答案对我来说有什么不同? – EdChum

+0

我在发帖时没有看到你的回答。我不会删除我的,因为它增加了一些新的东西,这是一个包含解释和基准测试的参考。不过,我担心你的问题,我认为这应该成为第一个答案。 – lucasnadalutti

+0

我没有重复答案的问题,只要它添加了新的东西,如果您将相关部分添加到您的答案中而不仅仅是一个链接,只是一个观察结果会更好 – EdChum

相关问题