有两个矩阵,第一个是我的输入矩阵:
第二个矩阵(“重命名矩阵”)用于替换第一个矩阵的值:
也就是说,查看重命名矩阵;必须将701替换为1,717必须替换为10等,以使输入矩阵变为以下形式:
? 值已定义但未放置。输入矩阵的第二列已排序(从上到下升序),但值不连续(没有“710”:请参见第一张图片)。
问题是如何从前两个矩阵得到输出矩阵(最后一张图片)。
问题是如何从前两个矩阵得到输出矩阵(最后一张图片)。
看起来这个问题需要使用稀疏矩阵解决。在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));
几乎像魔法一样。
今晚我没有机会检查这个 - 但如果它不能完全按照描述的方式工作,那么它应该非常接近...
max(IM(:))
和max(LUM(1.:))
?它们应该是相同的吗? - Floris{701 799}
会被替换为{1 0}
而不是{1 799}
。 - Phonon1..n
替换第二列中的值并相应地更改第一列中的值,则可以通过简单调用ismember
来完成所有这些操作。%# define "inputMatrix" here as the first array in your post
[~,newFirstColumn] = ismember(inputMatrix(:,1),inputMatrix(:,2));
To create your output, you'd then write
outputMatrix = [newFirstColumn,(1:length(newFirstColumn))'];
M
是原始矩阵,R
是重命名矩阵,下面是操作步骤。N = M;
for n = 1:size(M,1)
N(find(M==R(n,1))) = R(n,2);
end
N
,其中包含已重命名的值。如果您喜欢,您不必这样做。