具有numpy数组的分配“if”

时间:2015-10-13 15:27:25

标签: python arrays numpy

假设我有两个数组xy,并且想要一个数组ix[i]的数组x[i] > y[i];否则,它是y[i]

在numpy中是否有一些预先编写的方法可以做到这一点?

2 个答案:

答案 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)

执行此操作的一般方法是构造一个真值表,然后使用它来从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)