根据到其平均值的距离对二维数组进行排序

Sort 2 dimensional array based on the distance to its average

如何根据最接近数组平均值的行成员对 2d numpy 数组进行排序。

例如,我们有这个数组:

a = np.random.rand(10,4)

它的平均值可以这样给出:

myAverage = a.mean(axis=0)

现在,我想根据与 myAverage 的最近距离对 a 进行排序

谢谢

这是我试过的:

for i in range(a.shape[0]):
    for j in range(a.shape[0] - 1):
        if(abs(sum(a[i] - a[i].mean(axis=0) > a[j + 1] - a[j +1].mean(axis=0)))):
            a[i] = a[j]

这可能不是最有效的解决方案,但您可以将表示每一行的 numpy 数组转换为 python 列表:

    row_array = list(a[row_num])

并使用以下方式排序:

    sorted(row_array, key=lambda x: abs(x - myAverage[row_num]))

并转换回 numpy 数组。

    a[row_num] = np.toarray(row_array)

假设你指的是绝对距离,否则取出np.abs():

import numpy as np

np.random.seed(0)
a = np.random.rand(10,4)



row_means = np.mean(a,axis=1,keepdims=True)

row_means_dist = a - row_means


sorted_idx = np.argsort(np.abs(row_means_dist).min(axis=1))

result = a[sorted_idx]