如何正确比较3个不同的numpy数组的元素?

2024-04-29 04:17:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较来自3个不同数组的同一索引的元素。当我尝试if arr1[i] == arr2[i]时,我得到The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()。整个功能如下:

def tmr(arr1, arr2, arr3):
arr4 = arr1
for i in range(arr4.size):
    if arr1[i] == arr2[i]:
        arr4[i] = arr1[i]
    else:
        if arr2[i] == arr3[i]:
            arr4[i] = arr3[i]
return arr4
我比Python更熟悉C++,我真的看不出这为什么不能准确地工作。我也试过这样使用zip:

^{pr2}$

Tags: ofthean元素ifvaluemorewith
2条回答

numpy数组函数np.equalnp.logical_andnp.where-矢量化/广播

import numpy as np
arr1 = np.array([0,1,2,3,7])
arr2 = np.array([0,1,0,2,7])
arr3 = np.array([0,0,2,1,7])

arr4 = np.ones(5)*10


eq_idx = np.where(np.logical_and(np.equal(arr1, arr3), np.equal(arr2, arr3)))

arr4[eq_idx] = arr1[eq_idx]

arr4
Out[28]: array([ 0., 10., 10., 10.,  7.])

对于上一个示例中使用zip的预期结果,请尝试:

arr4 = arr1[np.equal(arr1, arr2) & np.equal(arr2, arr3)]

对于第一个代码块中的解释,可以使用列表理解:

^{pr2}$

根据您的示例,我不确定arr4的默认值,如果arr1[i] == arr2[i]arr2[i] == arr3[i],那么将它们保留为上面的None。在

这两种方法提供了不同的答案,但是如果我能正确地解释,第一种方法是期望的行为。在

相关问题 更多 >