2013-04-05 6 views
1

Я узнал, что numpy медленнее для отдельных элементов доступа для очень большой матрицы. Следующая часть кода занимает около 7-8 минут. Размер матрицы составляет около 3000 * 3000numpy 2D matrix - Как улучшить производительность в этом случае?

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 узлов. Может ли кто-нибудь помочь мне сделать это несколько раз? Или какие-то альтернативы?

Edit: Вот Расстояние функция()

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

Кстати я передаю координаты как кортежей .. Как и в р [0] = х-координаты и р [1] = y- координат ,

ответ

3

Можете ли вы разместить функцию Distance()? Если это общая функция, scipy.spatial.distance.cdist может вычислить матрицу расстояний очень быстро:

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

Edit:

Вы можете использовать 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.  ]] 
+1

Вы можете совместить это с 'AdjMatrix [AdjMatrix> = радиус] = 0 ', чтобы дублировать код выше, с не Петли Python. – mtrw

+0

Я отредактировал мой вопрос.Пожалуйста, смотрите. @mtrw Не могли бы вы рассказать? Прошу прощения .. Я не очень хорошо знаком с python –

Смежные вопросы