0
我有兩個向量v1和v2。是否有任何matlab函數可以找到v1和v2之間的置換T矩陣,以便在matlab中T * v1 = v2?實際上,我知道如何在矢量短的情況下手工找到置換矩陣。我只是不知道如何在向量的大小很長的時候使用matlab函數來找到這個矩陣。matlab中的置換矩陣
謝謝。
我有兩個向量v1和v2。是否有任何matlab函數可以找到v1和v2之間的置換T矩陣,以便在matlab中T * v1 = v2?實際上,我知道如何在矢量短的情況下手工找到置換矩陣。我只是不知道如何在向量的大小很長的時候使用matlab函數來找到這個矩陣。matlab中的置換矩陣
謝謝。
您可以使用排序的第二個輸出參數得到以下:
function [I, PMat] = permutation_From_To(A,B)
[~,IA] = sort(A);
[~,IB] = sort(B);
I(IB) = IA;
PMat(:,I) = eye(length(A));
您可以通過使用它:
A = rand(10,1);
B = A(randperm(10));
[I, PMat] = permutation_From_To(A,B);
%// All the following three lines will output the vector `B`.
B
A(I)
PMat*A
版本A(I)
會比PMat*A
快,所以我包括即使你只是要求矩陣版本。