【问题标题】:Testing if all values in a numpy array are equal [duplicate]测试numpy数组中的所有值是否相等[重复]
【发布时间】:2011-10-29 09:11:22
【问题描述】:

我有一个 numpy 一维数组 c 应该填充 a + b。我首先在使用PyOpenCL 的设备上执行a + b

我想使用numpy切片快速确定python中结果数组c的正确性。

这是我目前拥有的

def python_kernel(a, b, c):
    temp = a + b
    if temp[:] != c[:]:
        print "Error"
    else:
        print "Success!"

但我得到了错误:

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

但似乎a.anya.all 只会确定值是否不为0。

如果我想测试numpy 数组temp 中的所有缩放器是否等于numpy 数组c 中的每个值,该怎么办?

【问题讨论】:

  • all_values_are_same = all(your_array[0] == your_array): 如果每个值都等于第一个值,则返回一个布尔值列表,并断言它们都为真。

标签: python numpy


【解决方案1】:

为什么不直接使用 NumPy 函数中的numpy.array_equal(a1, a2)[docs]

【讨论】:

  • 可以查看array_equal()的源码,因为它调用了equal(),所以也创建了整个布尔向量。
  • 不知道为什么API不是a1.array_equal(a2)...
【解决方案2】:

如果np.array 数据类型是浮点数,np.allclose 是一个不错的选择。 np.array_equal 并不总是正常工作。例如:

import numpy as np
def get_weights_array(n_recs):
    step = - 0.5 / n_recs
    stop = 0.5
    return np.arange(1, stop, step)

a = get_weights_array(5)
b = np.array([1.0, 0.9, 0.8, 0.7, 0.6])

结果:

>>> a
array([ 1. ,  0.9,  0.8,  0.7,  0.6])
>>> b
array([ 1. ,  0.9,  0.8,  0.7,  0.6])
>>> np.array_equal(a, b)
False
>>> np.allclose(a, b)
True

>>> import sys
>>> sys.version
'2.7.3 (default, Apr 10 2013, 05:13:16) \n[GCC 4.7.2]'
>>> np.version.version
'1.6.2'

【讨论】:

  • 这让我很头疼,很高兴知道np.array_equal 用花车炸弹。谢谢你!
  • 通常的浮点精度错误。我不会责怪array_equal 在这里工作不正确。它做它应该做的事情。任何是的,allclose 是您打算做的正确选择。
【解决方案3】:

您可以根据比较结果调用anyif np.any(a+b != c): 或等效的if np.all(a+b == c):a+b != c 创建一个dtype=bool 的数组,然后any 查看该数组以查看是否有任何成员是True

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.array([4,5,2])
>>> c = a+b
>>> c
array([5, 7, 5]) # <---- numeric, so any/all not useful
>>> a+b == c
array([ True,  True,  True], dtype=bool) # <---- BOOLEAN result, not numeric
>>> all(a+b == c)
True

尽管如此,Amber's solution 可能更快,因为它不必创建整个布尔结果数组。

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 2014-12-27
    • 2014-11-27
    • 2013-01-27
    • 2018-02-16
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多