矢量化Numpy for循环

时间:2017-08-15 17:56:40

标签: python arrays numpy

我目前正在尝试在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,但这会产生错误的结果。

1 个答案:

答案 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, :]