Массивы, сгенерированные двоеточием, со скобками или без них в 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

Хороший ответ пришел от Рика Висселинка на этом форуме: 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]  

Добавление скобок принудительно группирует данные до и после оператора двоеточия (круглые скобки тоже сработали бы).

Стивен Кобелдик добавляет, что это объясняется тем, что +имеет более высокий приоритет, чем :.

Стивен Лорд также комментирует, что переход от строки 4 к строке 5 объясняется в документации:

Если указать нескалярные массивы, то MATLAB интерпретирует j:i:k как j(1):i(1):k(1).

Связанный контент