我想計算一個矩陣元素 (i, j),它是 python 中第 i 個和第 j 個點之間的距離。一種天真的方法是執行以下操作,制作單個矩陣需要 0.43 秒。您有什么想法可以加快此代碼的速度嗎?
對我來說,可以使用廣泛使用的軟體包,例如 scipy、scikit-learn。
import numpy as np
import time
def compute_distance_matrix(points: np.ndarray):
assert points.ndim == 2
n_point, n_dim = points.shape
squared_dist_matrix = np.zeros((n_point, n_point))
for i, p in enumerate(points):
squared_dist_matrix[:, i] = np.sum((points - p) ** 2, axis=1)
dist_matrix = np.sqrt(squared_dist_matrix)
return dist_matrix
a = np.random.randn(1000, 4)
ts = time.time()
for _ in range(10):
compute_distance_matrix(a)
print("average time {} sec".format(time.time() - ts))
uj5u.com熱心網友回復:
您可以使用 Scipy 的cdist或 sklearn 的pairwise_distances。
兩者都非常快,例如
from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cdist, pdist
a = np.random.randn(1000, 4)
D = cdist(a,a)
-或者-
D = pairwise_distances(a)
兩者都比自定義代碼快 10 倍。對我來說,cdist()是最快的,但我不知道實作細節以及不同的硬體如何產生影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/511873.html
