首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy 2D矩阵-如何在这种情况下提高性能?

numpy 2D矩阵-如何在这种情况下提高性能?
EN

Stack Overflow用户
提问于 2013-04-05 18:38:32
回答 1查看 256关注 0票数 1

我开始了解到,对于一个非常大的矩阵,numpy对于单个元素的访问速度很慢。下面的代码大约需要7-8分钟才能运行。矩阵的大小约为3000*3000

代码语言:javascript
复制
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个节点组成的图构造一个邻接矩阵。有人能帮我解决这个麻木的问题吗?或者其他选择?

编辑:这里是Distance()函数

代码语言:javascript
复制
Def Distance(p1,p2):
    distance=np.sqrt(np.square(p1[0]-p2[0])+np.square(p1[1]-p2[1]))
    return distance

顺便说一句,我将坐标作为元组传递..在p=x坐标和p1= y坐标中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-05 18:53:19

你能发布Distance()函数吗?如果是常用函数,scipy.spatial.distance.cdist可以非常快速地计算距离矩阵:

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

编辑

你确实可以使用pdist,下面是一个例子:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
[[ 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.        ]]

如果你想屏蔽一些数据:

代码语言:javascript
复制
dist[dist > 3.0] = 0
print dist

输出:

代码语言:javascript
复制
[[ 0.          2.23606798  1.11803399  0.        ]
 [ 2.23606798  0.          2.5         2.1023796 ]
 [ 1.11803399  2.5         0.          0.        ]
 [ 0.          2.1023796   0.          0.        ]]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15831766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档