Skip to main content
 首页 » 编程设计

python之NumPy 错误 : The truth value of an array with more than one element is ambiguous. 使用 a.any() 或 a.all()

2025年05月04日11dflying

我正在使用 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:

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

请您参考如下方法:

看起来 delta_new 和 delta_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() 

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

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