gpt4 book ai didi

matlab - 如何在 MATLAB 中按照其他向量的顺序对矩阵的列进行排序?

转载 作者:行者123 更新时间:2023-12-02 09:22:49 26 4
gpt4 key购买 nike

假设我有一个项目 ID 的向量 A:

A=[50936
332680
107430
167940
185820
99732
198490
201250
27626
69375];

我有一个矩阵 B,其行包含向量 A 中每个项目的 8 个参数的值:

B=[0    0   0   0   0   0   0   0   0   0
0 0 0 0 0 0 0 0 0 0
1 0 1 0 0 1 0 1 1 1
1 0 1 0 0 1 0 1 1 1
0 0 1 0 0 0 0 1 0 1
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1];

因此,矩阵 B 中的第 1 列表示向量 A 第 1 行中项目的数据,矩阵 B 中的第 2 列表示向量 A 第 2 行中的项目,依此类推。但是,我希望矩阵 B 以不同顺序存储在向量 A2 中的项目来包含信息:

A2=[185820
198490
69375
167940
99732
332680
27626
107430
50936
201250];

如何对它们进行排序,以便矩阵 B 的第 1 列包含向量 A2 第 1 行、矩阵 B< 的第 2 列中项目的数据 包含向量 A2 第 2 行中项目的数据,依此类推?

我的极其粗略的解决方案如下:

A=A'; A2=A2';

for i=1:size(A,2)
A(2:size(B,1)+1,i)=B(:,i);
end

A2(2:size(B,1)+1,:)=zeros(size(B,1),size(B,2));

for i=size(A2,2)
for j=size(A,2)
if A2(1,i)==A(1,j)
A2(2:end,i)=A(2:end,j);
end
end
end

B2 = A2(2:end,:);

但我想知道一种更干净、更优雅、更省时的方法来做到这一点。

最佳答案

可能的解决方案

您可以使用 ismember 函数的第二个输出。

[~ ,idx] = ismember(A2,A);
B2 = B(:,idx);

更新:我测试了我的解决方案和 hbaderts 提出的另一个解决方案。

disp('-----ISMEMBER:-------')
tic
[~,idx]=ismember(A2,A);
toc
disp('-----SORT:-----------')
tic
[~,idx1] = sort(A);
[~,idx2] = sort(A2);
map = zeros(1,size(idx2));
map(idx2) = idx1;
toc

这是 Octave 的结果:

-----ISMEMBER:-------
Elapsed time is 0.00157714 seconds.
-----SORT:-----------
Elapsed time is 4.41074e-05 seconds.

结论:排序方法效率更高!

关于matlab - 如何在 MATLAB 中按照其他向量的顺序对矩阵的列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com