假设我有两个数组x
和y
,并且想要一个数组i
为x[i]
的数组x[i] > y[i]
;否则,它是y[i]
。
在numpy中是否有一些预先编写的方法可以做到这一点?
答案 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])
答案 1 :(得分:2)
执行此操作的一般方法是构造一个真值表,然后使用它来从x
或y
例如
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)