Подтвердить что ты не робот

Сортировка строк массива другим массивом в Python

Я пытаюсь сортировать строки одного массива значениями другого. Например:

import numpy as np
arr1 = np.random.normal(1, 1, 80)
arr2 = np.random.normal(1,1, (80,100))

Я хочу сортировать arr1 в порядке убывания и поддерживать текущую связь между arr1 и arr2 (т.е. после сортировки обе строки arr1[0] и arr2[0, :] совпадают).

4b9b3361

Ответ 1

Используйте argsort следующим образом:

arr1inds = arr1.argsort()
sorted_arr1 = arr1[arr1inds[::-1]]
sorted_arr2 = arr2[arr1inds[::-1]]

Этот пример сортируется в порядке убывания.

Ответ 2

Используйте функцию zip: zip( *sorted( zip(arr1, arr2) ) ) Это сделает то, что вам нужно.

Теперь объяснение: zip(arr1, arr2) объединит два списка, поэтому у вас есть [(0, [... list 0...]), (1, [... list 1...]),...] Затем мы запускаем sorted(...), который по умолчанию сортирует на основе первого поля в кортеже. Затем мы снова запускаем zip(...), который перебирает кортежи из сортировки и создает два списка из первого элемента в кортеже (из arr1) и второго элемента (из arr2).