发现很多回答都是错的,在这里给出我认为正确的方法。只需要将特征分解后的特征值矩阵里的对角线上的特征值求-1/2次方,在乘上分解得到的特征向量矩阵变换回去即可。
def sqrt_matrix(A):
"""
求一个矩阵的-1/2,要求A是正定矩阵
"""
v, Q = np.linalg.eig(A)
return Q.dot(np.diag(v**(-1/2))).dot(np.linalg.inv(Q))
发现很多回答都是错的,在这里给出我认为正确的方法。只需要将特征分解后的特征值矩阵里的对角线上的特征值求-1/2次方,在乘上分解得到的特征向量矩阵变换回去即可。
def sqrt_matrix(A):
"""
求一个矩阵的-1/2,要求A是正定矩阵
"""
v, Q = np.linalg.eig(A)
return Q.dot(np.diag(v**(-1/2))).dot(np.linalg.inv(Q))