![Matlab 中带或不带括号的冒号生成数组](https://linux22.com/image/1552633/Matlab%20%E4%B8%AD%E5%B8%A6%E6%88%96%E4%B8%8D%E5%B8%A6%E6%8B%AC%E5%8F%B7%E7%9A%84%E5%86%92%E5%8F%B7%E7%94%9F%E6%88%90%E6%95%B0%E7%BB%84.png)
据我所知,数组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)。