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

克里斯塔达673

假设我有一个A商品ID的向量

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

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

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第1AB表示向量的第1行的项目数据,矩阵的第2表示向量的第2行中的项目数据A,依此类推。但是,我希望矩阵B按存储在vector中的项目的不同顺序包含信息A2

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

如何对它们进行排序,以使矩阵的B第1A2B包含vector的第1行中的项目数据,矩阵的第2包含vector的第2行中的项目数据A2,依此类推?

我做到这一点的非常粗略的解决方案如下:

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,:);

但是我想知道一种更清洁,更优雅,更省时的方法。

rahnema1

可能的解决方案

您可以使用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

这是八度的结果:

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

结论排序方法更有效!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

按其他索引的顺序对Pandas Dataframe进行排序

如何在NetBeans或其他Java IDE中按名称对类成员进行排序?

按特定数组的顺序对其他数组进行排序?

如何在Laravel中按字母顺序对记录进行排序

Python-按字母顺序对列表列表中的列表项进行排序,并让其他列表遵循交换顺序

如何在JavaScript中对按顺序编号的文件进行排序?

如何按其他列表的排序顺序对Scala对象列表进行排序?

使用向量按列对大型R矩阵进行排序

如何在不更改第一列中元素顺序的情况下在Matlab中对多维矩阵的行进行排序?

在一列中按出现顺序对DataFrame进行排序,而在其他列中保留顺序

如何在外壳脚本中按字母顺序对第二列进行排序,然后按数字排序?

在csv txt或任何其他文件中按字母顺序对行进行排序

如何在pandas数据框中对字符串列进行排序,在其中强制按该列排序的字母顺序?

如何在pyspark中按字母顺序对嵌套结构的列进行排序?

雄辩的:如何按其他表中列的总和排序

雄辩的:如何按其他表中列的总和排序

如何按R中属性的顺序对向量进行排序?

如何在不更改其他级别顺序的情况下按一个级别对MultiIndex进行排序

如何在Matlab中使用另一个向量中的值对矩阵进行排序?

如何在Notepad ++中按数字顺序对行进行排序?

Matlab如何对向量和矩阵进行按位与运算?

如何在Matlab中对没有重复元素的矩阵(或向量)进行排序?(如何区分排序)

按其他两列确定的顺序对一列进行排序(“映射”)

如何在Excel中按数据对列进行排序/排序

如何在C ++中从对数字进行排序到按字母顺序进行排序

如何在数据透视表中按字母数字顺序对列数据进行排序?

按其他数组中的值顺序对数组进行排序

如何在python中按顺序对列表进行排序?

如何在熊猫中按顺序对多列进行排序