我刚开始学习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)
然而,我遇到了一个“input must be a square array”的错误。我想知道这里发生了什么。谢谢。
ncoord
的定义。感谢您提高问题的参考价值并使其更易回答! - Nathan Tuggyfor j in range(i+1,n-1)
将会执行j=i+1, i+2, ..., n-2
。我猜你想让这两个范围都增加到n
,而不是n-1
。 - MarkGfor i in range(0,n):
和for j in range(i+1,n):
。如果这不是你的错误,那么你需要展示更多的代码。 - MarkG