重新排列一行matlab中的元素

Rearranging elements in a row matlab

我在 Matlab 中有两个矩阵。

A =

乙=

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

我要这个

A =

因此,

B =

有办法吗?! 谢谢

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

您可以使用 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 指定 row/column 对和关联值,我们使用 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