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

NumPy ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all(),numpy,Numpy,我在用NumPy计算矩阵的特征向量和特征值,只是想通过assert语句检查结果。这将抛出一个我不太理解的ValueError,因为打印这些比较效果很好。有什么建议可以让这个assert语句工作吗 import numpy as np A = np.array([[3,5,0], [5,7,12], [0,12,5]]) eig_val, eig_vec = np.linalg.eig(A) print('eigenvalue:', eig_val) print('eigenvector:', e

我在用NumPy计算矩阵的特征向量和特征值,只是想通过
assert
语句检查结果。这将抛出一个我不太理解的ValueError,因为打印这些比较效果很好。有什么建议可以让这个
assert
语句工作吗

import numpy as np
A = np.array([[3,5,0], [5,7,12], [0,12,5]])
eig_val, eig_vec = np.linalg.eig(A)
print('eigenvalue:', eig_val)
print('eigenvector:', eig_vec)

for col in range(A.shape[0]):
    assert (A.dot(eig_vec[:,col])) == (eig_val[col] * eig_vec[:,col])

正如它所说,这是含糊不清的。数组比较返回一个布尔数组。方法any()和all()减少数组中的值(逻辑_或逻辑_和)。此外,您可能不想检查平等性。您应该将您的情况替换为:

np.allclose(A.dot(eig_vec[:,col]), eig_val[col] * eig_vec[:,col])

错误消息很好地解释了这一点:

ValueError: The truth value of an array with more than one element is ambiguous. 
Use a.any() or a.all()
bool(np.array([False,False,True])应该返回什么?你可以提出几个似是而非的论点:

(1)
True
,因为
bool(np.array(x))
应该返回与
bool(list(x))
相同的值,并且非空列表是truelike

(2)
True
,因为至少有一个元素是
True

(3)
False
,因为并非所有元素都是
True

这还没有考虑到N-d案例的复杂性

因此,由于“具有多个元素的数组的真值不明确”,因此应使用
.any()
.all()
,例如:

>>> v = np.array([1,2,3]) == np.array([1,2,4])
>>> v
array([ True,  True, False], dtype=bool)
>>> v.any()
True
>>> v.all()
False
<> p>并且如果您比较浮动数组:

,您可能需要考虑<代码> NP.AlcOuts。
>>> np.allclose(np.array([1,2,3+1e-8]), np.array([1,2,3]))
True

试试这个=>numpy.array(yourvariable),后面跟着要比较的命令,不管你想比较什么。

你已经用
.any()
.all()
讨论了案例(2)和案例(3),但是仍然有一个简单的方法来获取numpy数组的truthy(非空列表)值吗?@RobinDeSchepper-可能
bool(数组大小)