NumPy ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
我在用NumPy计算矩阵的特征向量和特征值,只是想通过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
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(数组大小)
。