Python 如何使用numpy选择欧氏距离大于某个值的所有列向量
我的任务是从给定矩阵Python 如何使用numpy选择欧氏距离大于某个值的所有列向量,python,numpy,Python,Numpy,我的任务是从给定矩阵D中选择所有列向量,这些列向量的欧氏距离值大于矩阵中所有向量的平均欧氏距离值 这是矩阵(数组)D: >>> D array([[-1, 0, 5, 0, -1, 2, 2, -2, -1, 0], [ 3, -4, 4, -5, -2, -3, 1, -5, -3, -1]]) 我已经写了一个计算欧几里德平均数的函数。所有向量的距离: import numpy as np def average_euclid_dist (X
D
中选择所有列向量,这些列向量的欧氏距离值大于矩阵中所有向量的平均欧氏距离值
这是矩阵(数组)D
:
>>> D
array([[-1, 0, 5, 0, -1, 2, 2, -2, -1, 0],
[ 3, -4, 4, -5, -2, -3, 1, -5, -3, -1]])
我已经写了一个计算欧几里德平均数的函数。所有向量的距离:
import numpy as np
def average_euclid_dist (X, Y):
return np.sum(np.sqrt(X**2 + Y**2)) / X.shape[0]
average_ed = average_euclid_dist(D[0,:], D(1,:))
现在我一直在琢磨如何比较每一个向量(列),以便只比较那些带有euc的向量。将选择大于平均值的距离。这应该是所需的输出:
array([[ 0, 5, 0, -2],
[-4, 4, -5, -5]])
如果我不必为此使用for循环,我会很高兴,最好是一些简单的方法。你必须使用掩码:
import numpy as np
D = np.array([[-1, 0, 5, 0, -1, 2, 2, -2, -1, 0], [ 3, -4, 4, -5, -2, -3, 1, -5, -3, -1]])
euclid = np.sqrt(D[0, :]**2 + D[1, :]**2) ## calculate the norm of the vectors
mask = euclid > euclid.mean() ## find the ones that are greated than the mean.
print(mask)
# [False True True True False False False True False False]
Wanted = np.array([D[0, mask], D[1, mask]]) #Apply the mask
print((np.sqrt(Wanted[0, :]**2 + Wanted[1, :]**2) > euclid.mean()).all() ) #Verif
# True
你必须使用面具:
import numpy as np
D = np.array([[-1, 0, 5, 0, -1, 2, 2, -2, -1, 0], [ 3, -4, 4, -5, -2, -3, 1, -5, -3, -1]])
euclid = np.sqrt(D[0, :]**2 + D[1, :]**2) ## calculate the norm of the vectors
mask = euclid > euclid.mean() ## find the ones that are greated than the mean.
print(mask)
# [False True True True False False False True False False]
Wanted = np.array([D[0, mask], D[1, mask]]) #Apply the mask
print((np.sqrt(Wanted[0, :]**2 + Wanted[1, :]**2) > euclid.mean()).all() ) #Verif
# True