我在Matlab中有两个矩阵。
和
我想根据A矩阵中相应的列号分配具有相同单元格值的元素,并在那里移动元素。我想用B映射B的元素,以便B元素也在那个位置移动。
我想要这个
因此,
有办法做到这一点吗?! 感谢。
答案 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