gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:52:53 60 4
gpt4 key购买 nike

我想在考虑位置的情况下一个元素一个元素地比较两个 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

我很困惑,谁能解释一下我做错了什么

谢谢

最佳答案

您还可以使用 array_equal :

In [11]: a = np.array([1, 2, 3])

In [12]: b = np.array([2, 1, 3])

In [13]: np.array_equal(a, a)
Out[13]: True

In [14]: np.array_equal(a, b)
Out[14]: False

这应该更有效,因为您不需要保留临时 a==b...


注意:关于性能,对于较大的数组,您希望使用 np.all 而不是 allarray_equal 执行大致相同的除非数组在早期不同,那么它会更快,因为它可能会在早期失败:

In [21]: a = np.arange(100000)

In [22]: b = np.arange(100000)

In [23]: c = np.arange(1, 100000)

In [24]: %timeit np.array_equal(a, a) # Note: I expected this to check is first, it doesn't
10000 loops, best of 3: 183 µs per loop

In [25]: %timeit np.array_equal(a, b)
10000 loops, best of 3: 189 µs per loop

In [26]: %timeit np.array_equal(a, c)
100000 loops, best of 3: 5.9 µs per loop

In [27]: %timeit np.all(a == b)
10000 loops, best of 3: 184 µs per loop

In [28]: %timeit np.all(a == c)
10000 loops, best of 3: 40.7 µs per loop

In [29]: %timeit all(a == b)
100 loops, best of 3: 3.69 ms per loop

In [30]: %timeit all(a == c) # ahem!
# TypeError: 'bool' object is not iterable

关于python - 如何考虑元素的位置一一比较numpy数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585119/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com