【问题标题】:Sort 2 dimensional array based on the distance to its average根据到平均值的距离对二维数组进行排序
【发布时间】:2020-02-13 15:28:08
【问题描述】:

如何根据最接近数组平均值的行成员对二维 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]

【问题讨论】:

  • 您要对列还是行进行排序?
  • 你可以在这里做的最好的事情就是提供一个例子
  • @DanielMesejo rows 我刚刚编辑了问题。谢谢
  • 但我相信您正在计算列的平均值?

标签: python arrays sorting mean closest


【解决方案1】:

假设你的意思是绝对距离,否则取出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]

【讨论】:

  • 谢谢,我实际上希望结果返回原始数组值而不是距离你能告诉我怎么做吗?
  • 这正是我想要的。谢谢!
  • 没问题!如果您认为这是正确的答案,请采纳=)
【解决方案2】:

这可能不是最有效的解决方案,但您可以将表示每一行的 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)

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2014-07-30
    • 2022-01-10
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多