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