我目前正在尝试在NumPy中对一些操作进行矢量化。 s是一个非常大的数字(10000),X代表一个大约1200000
的numpy数组for element1 in range(1,s+1):
d = np.zeros(s)
for element2 in range(1,s+1):
d[element2-1] = norm(np.subtract(X[0:n,element1],X[0:n,element2]))
我试图在不使用for循环的情况下重写它,但我想不出办法。一种尝试方法涉及使用zip和np.tile,但这会产生错误的结果。
答案 0 :(得分:0)
这些基本上是输入数组切片上的欧氏距离 -
from scipy.spatial.distance import cdist, pdist, squareform
X_slice = X[0:n,1:s+1]
d_all = squareform(pdist(X_slice.T))
因此,在第一个循环中,它只是输出d_all
的一个切片,可以重新用作d
,就像这样 -
for element1 in range(1,s+1):
d = d_all[element1-1, :]