2015-10-13 63 views
1

说我有两个阵列,xy,并希望一个数组,其元素是i如果x[i]x[i] > y[i];否则,它是y[i]分配“如果”与numpy的阵列

在numpy中是否有一些预先写好的方法来做到这一点?

+0

x和y是相同的形状吗? –

+0

我可以让他们如此,但如果有一个一般的答案,我会感兴趣 –

回答

3

你只是寻找“逐点最多2个阵列”,它可以与numpy.maximum()

x = np.array([0, 1, 2]) 
y = np.array([1, 2, 0]) 
np.maximum(x, y) 

输出array([1, 2, 2])

+0

工作 - 谢谢! –

2

一般的方式来做到这一点获得是建立一个真值表,然后用它来选择指数从xy

例如。

a = np.random.rand(10) 
b = np.random.rand(10) 
truth_table = a > b 
# where truth_table[i] is True, select a[i] else b[i] 
new_arr = np.where(truth_table, a, b) 
# in one step 
new_arr = np.where(a > b, a, b) 

assert ((a >= b) == (new_arr == a)).all() 
assert ((a <= b) == (new_arr == b)).all() 

numpy.where比这更强大,因为它可广播输入阵列中的一个或两者,以相同的形状真值表。例如。

# where a[i] is greater than b[i], select a[i], else 0 
new_arr = np.where(a > b, a, 0)