替换矩阵中的所有数字

时间:2013-02-13 22:12:15

标签: matlab matrix replace

有两个矩阵;第一个是我的输入矩阵

enter image description here

和第二个(“重命名矩阵”)用于替换第一个的值

enter image description here

即查看重命名矩阵; 701必须替换为1,...,717必须替换为10等。这样输入矩阵就会变成这样

enter image description here

?值已定义,但我没有把它们。输入矩阵的第二列已经排序(从上到下按升序排列),但值不是连续的(没有“710”:见第一张图片。)

问题是如何从前两个获得输出矩阵(最后一张图片)。

3 个答案:

答案 0 :(得分:2)

在我看来,它正在为稀疏矩阵解决方案而尖叫。在matlab中,您可以使用以下命令创建稀疏矩阵:

SM = sparse( ri, ci, val );

其中ri是非零元素的行索引,ci是相应的列索引,val是值。

让我们调用输入矩阵IM和查找矩阵LUM,然后构造稀疏矩阵:

nr = size(LUM, 1);
SM = sparse( ones(nr, 1), LUM(:, 1), LUM(:, 2) );

现在我们可以将结果放在一行:

newMatrix = reshape(SM(1, IM), size(IM));
几乎是魔法。

今晚我没有机会检查这个 - 但是如果它没有完全按照描述的那样工作,它应该非常接近......

答案 1 :(得分:1)

如果第一列中的值全部出现在第二列中,并且如果您想要的只是将第二列中的值替换为1..n并相应地更改第一列中的值,则可以执行所有操作只需简单调用ismember

即可
%# define "inputMatrix" here as the first array in your post

[~,newFirstColumn] = ismember(inputMatrix(:,1),inputMatrix(:,2));

要创建输出,您需要编写

outputMatrix = [newFirstColumn,(1:length(newFirstColumn))'];

答案 2 :(得分:1)

如果M是原始矩阵且R是重命名矩阵,那么您就是这样做的

N = M;

for n = 1:size(M,1)
    N(find(M==R(n,1))) = R(n,2);
end

请注意,在这种情况下,您将使用重命名的值创建新矩阵N。如果你愿意,你不必这样做。