Генерируемые двоеточием массивы с или без скобок в 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).