Самый эффективный способ получить отсортированные индексы на основе двух массивов - PullRequest
0 голосов
/ 02 декабря 2018

Как я могу получить отсортированные индексы массива numpy (расстояние), рассматривая только определенные индексы из другого массива numpy (val).

Например, рассмотрим два приведенных ниже массива numpy:1003 *

val = np.array([[10, 0,  0,  0,  0],
                [0,  0,  10, 0,  10],
                [0,  10, 10, 0,  0],
                [0,  0,  0,  10, 0],
                [0,  0,  0,  0,  0]])


distance = np.array([[4, 3, 2, 3, 4],
                     [3, 2, 1, 2, 3],
                     [2, 1, 0, 1, 2],
                     [3, 2, 1, 2, 3],
                     [4, 3, 2, 3, 4]])

расстояния, где val == 10 - это 4, 1, 3, 1, 0, 2. Я бы хотел, чтобы они были отсортированы по 0, 1, 1, 2, 3, 4 и возвращалсясоответствующие индексы из массива расстояний.

Возвращает что-то вроде:

(array([2, 1, 2, 3, 1, 0], dtype=int64), array([2, 2, 1, 3, 4, 0], dtype=int64))

или:

(array([2, 2, 1, 3, 1, 0], dtype=int64), array([2, 1, 2, 3, 4, 0], dtype=int64))

, поскольку второй и третий элементы имеют расстояние «1», поэтому я думаю, что индексы могут бытьвзаимозаменяемые

1 Ответ

0 голосов
/ 02 декабря 2018

Вот один способ с masking -

In [20]: mask = val==10

In [21]: np.argwhere(mask)[distance[mask].argsort()]
Out[21]: 
array([[2, 2],
       [1, 2],
       [2, 1],
       [3, 3],
       [1, 4],
       [0, 0]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...