问题:以下代码未按预期提供给定的示例坐标。 (什么算法?-请参考下面的链接)
我尝试实现此处描述的算法:finding the coordinates of points from distance matrix@math.stackexchange.com
代码:
# https://math.stackexchange.com/questions/156161/finding-the-coordinates-of-points-from-distance-matrix
import numpy as np
from scipy import spatial
example = np.array([[0,0],[1,3],[4,4]])
distance_matrix = spatial.distance_matrix(example,example)
def get_m_matrix(distance_matrix):
d = distance_matrix
shape = d.shape
out = np.zeros(shape)
for i in range(shape[0]):
for j in range(shape[1]):
out[i,j] = ( d[0,j]**2 + d[i,0]**2 - d[i,j]**2)/2
return out
m_matrix = get_m_matrix(distance_matrix)
eigenvalue, eigenvectors = np.linalg.eig(m_matrix)
eigenvalue_matrix = np.diag(eigenvalue)
assert np.equal(np.round(np.dot(np.dot(eigenvectors, eigenvalue_matrix),np.linalg.inv(eigenvectors))),np.round(m_matrix)).all()
X = np.dot(eigenvectors, eigenvalue_matrix**0.5)
print('example',example,sep='\n')
print('distance_matrix',distance_matrix,sep='\n')
print('m_matrix',m_matrix,sep='\n')
print('eigenvalue',eigenvalue,sep='\n')
print('eigenvectors',eigenvectors,sep='\n')
print('eigenvalue_matrix',eigenvalue_matrix,sep='\n')
print('result',X,sep='\n')
我想我的描述中没有。我阅读并观看了一些有关特征值分解的视频。检查有关那里使用的功能的numpy文档。我很确定M矩阵很好(找到了其他问题,但是算法有点不同,但是M矩阵方程是相同的)。另一件事,我检查了YouTube上的示例中的np.linalg.eig
,但特征向量不匹配。断言有效,但仍然令我困惑。
还有一件事,如果您在答案中使用方程式,请请描述变量。您不是在与专家交谈,并且因为他们知道,所以没有专家会读您。像孩子一样回答。谢谢!