NumPy 错误:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
Posted
技术标签:
【中文标题】NumPy 错误:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()【英文标题】:NumPy Error: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 【发布时间】:2019-07-05 22:57:18 【问题描述】:我正在使用 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:
谁能告诉我我做错了什么?
【问题讨论】:
欢迎来到 ***!为了充分利用该站点,ask good questions 很重要,其中包括创建一个 Minimal, Complete, and Verifiable 示例。 【参考方案1】:delta_new
是一个矩阵。没有为矩阵定义线性算术比较操作。您尝试通过简单的标量比较将一个值矩阵与另一个值矩阵进行比较。 Python 不知道如何给你一个单一的 T/F 结果。
我怀疑您需要矩阵上的一些标量属性,例如行列式。
【讨论】:
啊……说得通。我是个彻头彻尾的白痴!!谢谢:)【参考方案2】:实际上,您有一个矩阵 delta_new
与另一个矩阵 epsilon**2 * delta_0
进行比较,后者产生多个真值。
对于多个真值,没有确定的是或否。
因此该条件可以使用.all
(并针对每个元素)或.any
(或针对每个元素)来解决这种多重性。
【讨论】:
【参考方案3】:看起来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()
您必须基本上“选择”如何将所有数组中所有值的比较折叠为单个布尔值。
>>> (a<b).any()
True
>>> (a<b).all()
False
【讨论】:
【参考方案4】:稀疏矩阵也会出现这种情况,例如:`scipy.sparse.csr.csr_matrix
解决方法是添加todense()
【讨论】:
以上是关于NumPy 错误:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()的主要内容,如果未能解决你的问题,请参考以下文章
scipy.optimize.curve_fit ValueError:具有多个元素的数组的真值不明确
SciPy PearsonR ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
Model.fit with ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
关于 colab - class_weight 导致 ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
ValueError:具有多个元素的数组的真值不明确。在绘制框架时在 plt.show() 中使用 a.any() 或 a.all()