考虑到元素的位置,如何一一比较numpy数组元素? - python

我想比较两个numpy数组,一元素一元素地考虑位置。例如

[1, 2, 3]==[1, 2, 3]  -> True

[1, 2, 3]==[2, 1, 3]  -> False

我尝试了以下

    for index in range(list1.shape[0]):
        if list1[index] != list2[index]:
            return False
    return True

但我收到以下错误

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

但是,以下不是.any或.all的正确用法

 numpy.any(numpy.array([1,2,3]), numpy.array([1,2,3]))


 numpy.all(numpy.array([1,2,3]), numpy.array([1,2,3]))

当它回来时

 TypeError: only length-1 arrays can be converted to Python scalars

我很困惑,有人可以解释我在做什么错

谢谢

python大神给出的解决方案

您可以将布尔数组传递给all,例如:

>>> import numpy as np
>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 1, 3])
>>> a == b
array([False, False,  True], dtype=bool)
>>> np.all(a==b) # also works with all for 1D arrays
False

请注意,对于小型阵列,内置的allnp.all快得多(并且np.array_equal仍然更慢):

>>> timeit.timeit("all(a==b)", setup="import numpy as np; a = np.array([1, 2, 3]); b = np.array([2, 1, 3])")
0.8798369040014222
>>> timeit.timeit("np.all(a==b)", setup="import numpy as np; a = np.array([1, 2, 3]); b = np.array([2, 1, 3])")
9.980971871998918
>>> timeit.timeit("np.array_equal(a, b)", setup="import numpy as np; a = np.array([1, 2, 3]); b = np.array([2, 1, 3])")
13.838635700998566

但不适用于多维数组:

>>> a = np.arange(9).reshape(3, 3)
>>> b = a.copy()
>>> b[0, 0] = 42
>>> all(a==b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> np.all(a==b)
False

对于较大的阵列,np.all最快:

>>> timeit.timeit("np.all(a==b)", setup="import numpy as np; a = np.arange(1000); b = a.copy(); b[999] = 0")
13.581198551000853
>>> timeit.timeit("all(a==b)", setup="import numpy as np; a = np.arange(1000); b = a.copy(); b[999] = 0")
30.610838356002205
>>> timeit.timeit("np.array_equal(a, b)", setup="import numpy as np; a = np.arange(1000); b = a.copy(); b[999] = 0")
17.95089965599982