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