重新排列matlab中的元素

时间:2016-02-14 08:56:30

标签: matlab cell element

我在Matlab中有两个矩阵。

A = enter image description here

B = enter image description here

我想根据A矩阵中相应的列号分配具有相同单元格值的元素,并在那里移动元素。我想用B映射B的元素,以便B元素也在那个位置移动。

我想要这个

A = enter image description here

因此,

B = enter image description here

有办法做到这一点吗?! 感谢。

1 个答案:

答案 0 :(得分:1)

我能想到的最简单的方法是创建行/列对,其中行对应矩阵的行位置,列位置是矩阵本身的实际元素。在这些行/列对上看到的值再次只是矩阵值本身。

您可以使用sparse轻松完成此操作。重新创建上面的矩阵并将其存储在A

A = [1 2 5 8; 1 2 4 7];

......我会这样做:

r = repmat((1:size(A,1)).', 1, size(A,2)); %'
S = full(sparse(r(:),A(:),A(:)));

第一行代码为矩阵A中的每个值生成行位置,然后使用sparse指定行/列对和关联值,我们使用full进行转换到一个合适的数字矩阵。

我们得到:

S =

     1     2     0     0     5     0     0     8
     1     2     0     4     0     0     7     0

您也可以对矩阵B执行相同的操作。您使用sparse并将第三个参数指定为B

B = [0.5 0.2 0.6 0.8; 0.4 0.6 0.8 0.9];
S2 = full(sparse(r(:),A(:),B(:)));

我们得到:

>> S2

S2 =

    0.5000    0.2000         0         0    0.6000         0         0    0.8000
    0.4000    0.6000         0    0.8000         0         0    0.9000         0