3

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

在此处输入图像描述

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

在此处输入图像描述

也就是看重命名矩阵;701 必须替换为 1,...,717 必须替换为 10 等.. 这样输入矩阵就变成了这样

在此处输入图像描述

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

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

4

3 回答 3

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));

几乎是魔法。

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

于 2013-02-14T03:14:46.590 回答
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))'];
于 2013-02-13T22:30:10.220 回答
1

如果M是原始矩阵并且R是重命名矩阵,这是您的操作方法

N = M;

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

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

于 2013-02-13T22:31:31.057 回答