import numpy as np
def find_eigenvalue(arr, vec):
result = None
if not np.all(np.isclose(vec, 0.0)):
with np.errstate(divide='ignore', invalid='ignore'):
for x, y in zip(np.dot(arr, vec), vec):
if np.isclose(y, 0.0) and np.isclose(x, 0.0):
continue
if result is None:
result = x / y
elif not np.isclose(result, x / y):
result = None
break
return result
想想特征向量的定义。由矩阵a表示的线性变换的特征向量v是当对其应用该线性变换时仅在幅度而不是方向上改变的向量。特征向量大小的标量变化就是它的特征值。你有一个线性变换,你已经得到了它的特征向量-要找到特征值,你需要做的就是把变换应用到特征向量上,并确定每个特征向量的标度
给定矩阵
arr
和向量vec
,如果vec
是arr
的特征向量,那么:因此,遍历
np.dot(arr, vec) / vec
的所有值(最终忽略零向量作为势本征向量,并抑制势除零的误差),将揭示本征值:效果如预期:
最后,请注意
np.linalg.svd()
还将计算所有这些:和
s
将包含特征值,u
和vh
将包含特征向量(更准确地说,u
中的左奇异特征向量和vh
中的右奇异特征向量的厄米特值)相关问题 更多 >
编程相关推荐