有效地组合两个numpy数组而不添加

时间:2014-03-17 06:20:56

标签: python arrays numpy statistics sum

我目前有两个等长的大型numpy数组。第一个数组填充5个值的值,这些值将是5个浮点值或5个0的集合:

    [ [.03, 5, .1, 0.23, 5], [.1, .6, .8, 4.3], [0,0,0,0,0] ... ] 

第二个数组以相同的方式填充值。我需要组合两个数组,以便在array_two设置非零值的任何位置,array_one中的相应位置需要设置为该值。如果array_one已经有一个值,那么它应该保持不变。这有点拗口,所以这里有一个我试图解释的例子。

    Array one:  [ [.03, 5, .1, 0.23, 5], [0,0,0,0,0], [.1, .6, .8, 4.3, .2], [0,0,0,0,0], [0,0,0,0,0] ... ]

    Array two: [ [0,0,0,0,0], [0,0,0,0,0], [.1, .6, .8, 4.3], [0,0,0,0,0], 
    [32 ,2 , 4.6 , 3.4 , 0.2] ... ]

结果数组应为:

    [ [.03, 5, .1, 0.23, 5], [0,0,0,0,0], [.1, .6, .8, 4.3, .2], [0,0,0,0,0], 
       [32 ,2 , 4.6 , 3.4 , 0.2] ...     ]

基本上新数组从位置5的array_two获取值。这不能用总和来完成,因为这会使位置3成为应有的两倍。

1 个答案:

答案 0 :(得分:1)

numpy.where适用于以下情况:

import numpy as np
wh = (a != 0).any(1, keepdim=True)
# or for numpy version < 1.7
wh = (a != 0).any(1)[:, np.newaxis]
c = np.where(wh, a, b)

在您的情况下,numpy.maximum也可能有用。

c = np.maximum(a, b)