有两个矩阵;第一个是我的输入矩阵
和第二个(“重命名矩阵”)用于替换第一个的值
即查看重命名矩阵; 701必须替换为1,...,717必须替换为10等。这样输入矩阵就会变成这样
?值已定义,但我没有把它们。输入矩阵的第二列已经排序(从上到下按升序排列),但值不是连续的(没有“710”:见第一张图片。)
问题是如何从前两个获得输出矩阵(最后一张图片)。
答案 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
。如果你愿意,你不必这样做。