Matlab 中带或不带括号的冒号生成数组

Matlab 中带或不带括号的冒号生成数组

据我所知,数组a:d:b[a:d:b]是完全相同的东西。例如,

>> [1:3] == 1:3
ans =
  1×3 logical array
   1   1   1

然而,这两个表达式给出了不同的结果:

>> [1:3]' + 1:3
ans =
     2     3

>> [1:3]' + [1:3]
ans =
     2     3     4
     3     4     5
     4     5     6

为什么?

(我正在使用 Matlab R2017b 9.3.0.713579)

答案1

论坛上的 Rik Wisselink 给出了一个很好的答案: https://www.mathworks.com/matlabcentral/answers/391046-colon-generated-arrays-with-or-without-brackets

造成这种情况的原因是对该语句的评估顺序意外:

[1:3]' + 1:3  
([1:3]' + 1):3  
([1;2;3]+1):3  
[2;3;4]:3  
2:3  
[2,3]  

添加括号会强制在冒号运算符之前和之后进行分组(括号也可以起作用)。

Stephen Cobeldick 补充道,这是因为 的+优先级比 更高:

Steven Lord 还评论说,文档中解释了从第 4 行到第 5 行的转换:

如果指定非标量数组,则 MATLAB 会将 j:i:k 解释为 j(1):i(1):k(1)。

相关内容