1

我开始知道 numpy 对于一个非常大的矩阵的单个元素访问很慢。以下部分代码运行大约需要 7-8 分钟。矩阵大小约为 3000*3000

import numpy as np
................
................
ArrayLength=len(Coordinates)
AdjMatrix=np.zeros((len(Angles),len(Angles)))
for x in range(0, Arraylength):
    for y in range(x+1, Arraylength-x):
        distance=Distance(Coordinates[x],Coordinates[y)
            if(distance<=radius)
                AdjMatrix[x][y]=distance
                AdjMatrix[y][x]=distance

我基本上是在尝试为由大约 3000 个节点组成的图构建一个邻接矩阵。有人可以帮我做这种麻木的方式吗?或者有什么替代方案?

编辑:这是距离()函数

Def Distance(p1,p2):
    distance=np.sqrt(np.square(p1[0]-p2[0])+np.square(p1[1]-p2[1]))
    return distance

顺便说一句,我将坐标作为元组传递。如 p[0]=x 坐标和 p[1]=y 坐标。

4

1 回答 1

3

能发一下Distance()功能吗?如果是普通函数,scipy.spatial.distance.cdist可以很快计算出距离矩阵:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html#scipy.spatial.distance.cdist

编辑

您确实可以使用pdist,这是一个示例:

from scipy.spatial.distance import pdist, squareform
coordinates = [(0.0, 0), (1.0, 2.0), (-1.0, 0.5), (3.1, 2.1)]
dist = squareform(pdist(coordinates))
print dist

输出:

[[ 0.          2.23606798  1.11803399  3.74432905]
 [ 2.23606798  0.          2.5         2.1023796 ]
 [ 1.11803399  2.5         0.          4.40113622]
 [ 3.74432905  2.1023796   4.40113622  0.        ]]

如果要屏蔽一些数据:

dist[dist > 3.0] = 0
print dist

输出:

[[ 0.          2.23606798  1.11803399  0.        ]
 [ 2.23606798  0.          2.5         2.1023796 ]
 [ 1.11803399  2.5         0.          0.        ]
 [ 0.          2.1023796   0.          0.        ]]
于 2013-04-05T10:53:18.977 回答