Сортировка 2-х мерного массива по расстоянию до его среднего - PullRequest
1 голос
/ 16 октября 2019

Как мне отсортировать двумерный массив с numy на основе членов ближайших строк к среднему значению массива.

Например, у нас есть этот массив:

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

его среднее значение может быть задано как:

myAverage = a.mean(axis=0)

Теперь я хочу отсортировать по ближайшемурасстояние до myAverage

Спасибо

Вот что я пробовал:

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]

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Предположим, вы имеете в виду абсолютное расстояние, в противном случае выведите 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]
0 голосов
/ 16 октября 2019

Возможно, это не самое эффективное решение, но вы можете преобразовать массив 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...