【问题标题】:What is this piece of code in Matlab doingMatlab 中的这段代码是做什么的
【发布时间】:2020-03-03 06:02:10
【问题描述】:

这是我试图理解的程序中的一个 sn-p。为了便于理解,我更改了变量名称。我在 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=magic(4),在哪里 一个=

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 显示为 4x3...
  • 这段代码毫无意义。它将a 的每个唯一元素的最后一次出现的索引分配给与该元素对应的所有位置到c
  • ... 这会导致对具有所有唯一元素的数组进行“排序”,例如从 magic() 获得的元素。
  • 我对 4x3 阵列不好
  • 我刚刚尝试了一个 4x4 矩阵,并对其进行了更新,此代码正在程序中使用,因此并非毫无意义

标签: matlab multidimensional-array


【解决方案1】:

cmets 中的答案是正确的 - 也许它在程序中提供了一个功能,但脱离上下文,代码似乎毫无意义。

这基本上就是正在发生的事情。假设你有一个矩阵 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由是完全独一无二的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2016-05-31
    • 2018-08-09
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多