这是我试图理解的一个程序的片段。为了更容易理解,我更改了变量名。我在MatLab中没有做太多的编码,所以我不能真正理解发生了什么。当我保持a=magic(4(并从这个代码中得到输出时,我认为它是排序或其他什么的,但对于其他输入来说似乎不是这样
a = [14 41 4 16;7 12 45 0;12 12 45 17; 3 2 1 15]
b=a(:)
c=zeros(4,4)
a是4x4矩阵,b是a的列矢量,c是一个4X4的零矩阵
for kk = 1:length(b)
c(a==b(kk)) = kk;
end
c=
1 5 9 13
2 7 11 14
7 7 11 15
4 8 12 16
如果我尝试a=魔术(4(,其中a=
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
那么c=
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
注释中的答案是正确的——也许它为程序中的一个函数服务,但脱离上下文的代码似乎毫无意义。
这基本上就是正在发生的事情。假设你有一个矩阵a
A = [3 4;
5 6]
然后B会像这样:
B = [3 4 5 6]
然后,通过将A的第kk个元素与B的第kk个元素进行比较来创建C。如果两者相等,则C的第kk个元素将是kk。因此,在上面的例子中,C看起来是这样的:
C = [1 2;
3 4]
如果,正如你所发现的,在你的原始矩阵A中有多个相同数字的条目,那么最终矩阵C将只具有该数字最后一次唯一出现的索引。所以,如果
A = [3 3;
5 6]
B = [3 3 5 6]
C = [2 2;
3 4]
第一个C
有三次7的原因是因为12的最后一个位置在位置7。第二个C
与第一个C
不同的原因是,它所用的A
是完全独特的。