这段代码在Matlab中做什么



这是我试图理解的一个程序的片段。为了更容易理解,我更改了变量名。我在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是完全独特的。

相关内容

  • 没有找到相关文章

最新更新