我有兩個,numpy陣列,第一個,A
,一維,第二個,B
,是在應用程序我想到的二維,但真的可以有任何維度。 B
的每個索引涵蓋了與A
的單個索引相同的範圍。排序一個NumPy數組並排列另一個與它
現在,我想對A
進行排序(按降序排列),但想排列B
以及它的每個維度。從數學上講,如果P
是排序A
的置換矩陣,我想根據np.dot(P, np.dot(B, P.T))
轉換B
。例如。考慮這個例子排序巧合的是對應於反向排序:
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