У меня есть два массива numpy, первый, A
, будучи одномерным, второй, B
, является двумерным в приложении, которое я имею в виду, но на самом деле может иметь какое-либо измерение. Каждый индекс B
охватывает тот же диапазон, что и единственный индекс A
.Сортировка массива NumPy и перестановка другого вместе с ним
Теперь я хотел бы сортировать A
(в порядке убывания), но хотел бы переставить все измерения B
вместе с ним. Математически говоря, если P
является матрицей перестановок, которая сортирует A
, я хотел бы преобразовать B
в соответствии с np.dot(P, np.dot(B, P.T))
. Например. Рассмотрим следующий пример, где сортировка по совпадению соответствует обратном порядке:
In [1]: import numpy as np
In [2]: A = np.array([1,2,3])
In [3]: B = np.random.rand(3,3); B
Out[3]:
array([[ 0.67402953, 0.45017072, 0.24324747],
[ 0.40559793, 0.79007712, 0.94247771],
[ 0.47477422, 0.27599007, 0.13941255]])
In [4]: # desired output:
In [5]: A[::-1]
Out[5]: array([3, 2, 1])
In [6]: B[::-1,::-1]
Out[6]:
array([[ 0.13941255, 0.27599007, 0.47477422],
[ 0.94247771, 0.79007712, 0.40559793],
[ 0.24324747, 0.45017072, 0.67402953]])
Приложение Я имею в виду, чтобы получить собственные значения и собственные векторы несимметричной матрицы с использованием np.linalg.eig
(в отличие от eigh
, eig
не гарантирует упорядоченность собственные значения), сортировать их по абсолютной величине и обрезать пространство. Было бы полезно переставить компоненты матрицы, удерживающие собственные векторы, вместе с собственными значениями и выполнить усечение, разрезая его.
вы правы, конечно, что мне нужно только переставить столбцы матрицы собственных векторов. Спасибо, что указали это тоже. – Jonas