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

新手上路,请多包涵

我正在使用 numpy 处理图像卷积代码:

 def CG(A, b, x, imax=10, epsilon = 0.01):
    steps=np.asarray(x)
    i = 0
    r = b - A * x
    d = r.copy()
    delta_new = r.T * r
    delta_0 = delta_new
    while i < imax and delta_new > epsilon**2 * delta_0:
        q = A * d
        alpha = float(delta_new / (d.T * q))
        x = x + alpha * d
        if i%50 == 0:
            r = b - A * x
        else:
            r = r - alpha * q
        delta_old = delta_new
        delta_new = r.T * r
        beta = float(delta_new / delta_old)
        d = r + beta * d
        i = i + 1
        steps = np.append(steps, np.asarray(x), axis=1)
    return steps

我收到以下错误:

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

在线 while i < imax and delta_new > epsilon**2 * delta_0:

谁能告诉我我做错了什么?

原文由 SiltyDoubloon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

看起来 delta_newdelta_0 是 Numpy 数组,Numpy 不知道如何比较它们。

作为一个例子,想象一下如果你拿了两个随机的 Numpy 数组并试图比较它们:

 >>> a = np.array([1, 3, 5])
>>> b = np.array([5, 3, 1])
>>> print(a<b)
array([True, False, False])
>>> bool(a<b)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

您必须基本上“选择”如何将所有数组中所有值的比较折叠为单个布尔值。

 >>> (a<b).any()
True

>>> (a<b).all()
False

原文由 dtanabe 发布,翻译遵循 CC BY-SA 4.0 许可协议

实际上,您有一个矩阵 delta_new 正在与另一个矩阵 epsilon**2 * delta_0 进行比较,后者产生多个真值。

对于多个真值,没有明确的是或否。

因此,该条件可以使用 .all (和每个元素)或 .any (或每个元素)来解决这种多重性。

原文由 AER 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题