Python: получить индексы, которые будут сортировать массив строк в соответствии с другим массивом строк - PullRequest
0 голосов
/ 05 мая 2018

У меня вопрос, как получить индексы массива строк, которые бы сортировали другой массив.

У меня есть два массива строк:

A = np.array([ 'a', 'b', 'c', 'd' ])
B = np.array([ 'd', 'b', 'a', 'c' ])

Я хотел бы получить индексы, которые будут сортировать второй, чтобы соответствовать первому. Я пробовал функцию np.argsort, которая дает второй массив (преобразованный в список) в порядке, но, похоже, он не работает. Любая помощь будет высоко ценится. Спасибо и всего наилучшего, Bradipo

редактирование:

def sortedIndxs(arr):
    ???

такой, что

sortedIndxs([ 'd', 'b', 'a', 'c' ]) = [2,1,3,0]

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Векторизованный подход возможен через numpy.searchsorted вместе с numpy.argsort:

import numpy as np

A = np.array(['a', 'b', 'c', 'd'])
B = np.array(['d', 'b', 'a', 'c'])

xsorted = np.argsort(B)
res = xsorted[np.searchsorted(B[xsorted], A)]

print(res)

[2 1 3 0]
0 голосов
/ 05 мая 2018

Код, который получает правило преобразования из произвольной перестановки в произвольную перестановку.

  • создание indexTable: O (n)
  • проверка indexTable: O (n)
  • Итого: O (n)

A = [ 'a', 'b', 'c', 'd' ]
B = [ 'd', 'b', 'a', 'c' ]

indexTable = {k: v for v, k in enumerate(B)}
// {'d': 0, 'b': 1, 'a': 2, 'c': 3}

result = [indexTable[k] for k in A]
// [2, 1, 3, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...