【发布时间】:2015-04-25 13:49:05
【问题描述】:
我是 Python 新手,所以这个问题可能看起来很琐碎。但是,我没有找到与我类似的案例。我有一个 20 个节点的坐标矩阵。我想计算该集合中所有节点对之间的欧几里德距离,并将它们存储在成对矩阵中。例如,如果我有 20 个节点,我希望最终结果是 (20,20) 的矩阵,其中每对节点之间的欧几里得距离值。我尝试使用 for 循环遍历坐标集的每个元素并计算欧几里得距离,如下所示:
ncoord=numpy.matrix('3225 318;2387 989;1228 2335;57 1569;2288 8138;3514 2350;7936 314;9888 4683;6901 1834;7515 8231;709 3701;1321 8881;2290 2350;5687 5034;760 9868;2378 7521;9025 5385;4819 5943;2917 9418;3928 9770')
n=20
c=numpy.zeros((n,n))
for i in range(0,n):
for j in range(i+1,n):
c[i][j]=math.sqrt((ncoord[i][0]-ncoord[j][0])**2+(ncoord[i][1]-ncoord[j][1])**2)
但是,我收到“输入必须是方阵”的错误 ”。我想知道是否有人知道这里发生了什么。 谢谢
【问题讨论】:
-
请edit您的问题包括
ncoord的定义。感谢您提高问题的参考价值并使其更易于回答! -
你的 n 是多少?
for j in range(i+1,n-1)会做j=i+1, i+2, ..., n-2。我猜你希望这两个范围都达到n,而不是n-1。 -
@MarkG 是的,我有 20 个节点(n=20),我希望两个索引都上升到 n。我尝试了 n 而不是 n-1 但我得到了同样的错误。我可以在 MATLAB 中轻松编写代码,但我必须使用 Python。 Python 中的索引是不同的,所以我可能错了。
-
那么你的两个 for 循环都应该上升到 n:
for i in range(0,n):和for j in range(i+1,n):如果这不是你的错误,那么你需要显示更多代码。 -
@MarkG 是的,这不是我的错误。我的代码就是我在主要问题中提到的。我什么都没有了