相关疑难解决方法(0)

Numpy Broadcast执行欧几里德距离矢量化

我有2 x 4和3 x 4的矩阵.我想找到跨行的欧几里德距离,最后得到一个2 x 3矩阵.这是带有一个for循环的代码,它计算针对所有b行向量中每个行向量的欧氏距离.如何在不使用for循环的情况下执行相同的操作?

 import numpy as np
a = np.array([[1,1,1,1],[2,2,2,2]])
b = np.array([[1,2,3,4],[1,1,1,1],[1,2,1,9]])
dists = np.zeros((2, 3))
for i in range(2):
      dists[i] = np.sqrt(np.sum(np.square(a[i] - b), axis=1))
Run Code Online (Sandbox Code Playgroud)

python numpy machine-learning vectorization

8
推荐指数
3
解决办法
1万
查看次数

与熊猫成对的欧几里得距离忽略了NaNs

我从字典开始,这是我的数据已经被格式化的方式:

import pandas as pd
dict2 = {'A': {'a':1.0, 'b':2.0, 'd':4.0}, 'B':{'a':2.0, 'c':2.0, 'd':5.0}, 
'C':{'b':1.0,'c':2.0, 'd':4.0}}
Run Code Online (Sandbox Code Playgroud)

然后将其转换为熊猫数据框:

df = pd.DataFrame(dict2)
print(df)
     A    B    C
a  1.0  2.0  NaN
b  2.0  NaN  1.0
c  NaN  2.0  2.0
d  4.0  5.0  4.0
Run Code Online (Sandbox Code Playgroud)

当然,通过这样做,我可以一次获得一个差异:

df['A'] - df['B']
Out[643]: 
a   -1.0
b    NaN
c    NaN
d   -1.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我想出了如何遍历和计算AA,AB,AC:

for column in df:
print(df['A'] - df[column])

a    0.0
b    0.0
c    NaN
d    0.0
Name: A, dtype: float64
a   -1.0
b    NaN
c …
Run Code Online (Sandbox Code Playgroud)

python numpy euclidean-distance dataframe pandas

2
推荐指数
1
解决办法
724
查看次数

沿着3D阵列的轴的向量化欧式距离-Python

如何在3D数组的轴上应用在2D数组(cdist)上运行的函数?

我尝试使用numpy.apply_along_axis,但是我需要在2D阵列而不是1D上进行操作。我通过沿一个轴进行迭代获得了所需的结果,但如果可能的话,我希望将其向量化:

from scipy import spatial
import numpy as np

a = np.random.randn(600).reshape(10, 20, 3)
distances = np.array([spatial.distance.cdist(a[i,:,:], a[i,:,:]) for i in range(a.shape[0])])

Run Code Online (Sandbox Code Playgroud)

python numpy vectorization scipy

2
推荐指数
1
解决办法
62
查看次数