Имам списък с n полярни координати и функция за разстояние, която отнема две координати.
Искам да създам n x n матрица, която съдържа двойките разстояния под моята функция. Аз осъзнавам, че вероятно трябва да използвам някаква форма на векторизация с мрачен, но не съм сигурен точно как да го направя.
Отговори:
0 за отговор № 1Един прост кодов сегмент е по-долу за ваше сведение
import numpy as np
length = 10
coord_r = np.random.rand(length)*10
coord_alpha = np.random.rand(length)*np.pi
# Repeat vector to matrix form
coord_r_X = np.tile(coord_r, [length,1])
coord_r_Y = coord_r_X.T
coord_alpha_X = np.tile(coord_alpha, [length,1])
coord_alpha_Y = coord_alpha_X.T
matDistance = np.sqrt(coord_r_X**2 + coord_r_Y**2 - 2*coord_r_X*coord_r_Y*np.cos(coord_alpha_X - coord_alpha_Y))
print matDistance
0 за отговор № 2
Можеш да използваш scipy.spatial.distance.pdist
, Ако обаче разстоянието, което искате да изчислите, е евклидовото разстояние, може да сте по-добре просто да преобразувате точките си в правоъгълни координати, тъй като тогава pdist
ще направи изчисленията доста бързо, използвайки вграденото си Euclidean разстояние.