Использование квадратных скобок в MATLAB

В MATLAB вы можете легко создать массив целых чисел с помощью

N = 100; % Number of points
A = 1:N; % row vector of 1,2,3,..., 100

Если мне нужен вектор-столбец вместо вектора-строки, я могу сделать это с помощью

A = [1:N].';

Теперь MATLAB предупреждает меня, что

Use of brackets [] is unnecessary. Use parentheses to group if necessary.

Что ж, они не являются ненужными, потому что 1:N.' создает вектор-строку, поскольку транспонируется только скаляр N, а не полный массив.

Я, конечно, могу подавить это сообщение в этой строке, в этом файле или во всех файлах, но почему MATLAB вообще выдает это предупреждение, поскольку кажется, что в данном случае я не могу обойтись без этих скобок?

Оказалось, что большая часть путаницы происходит из-за использования американского английского языка The MathWorks, поскольку остальной англоязычный мир использует термин скобки для () и термина квадратные скобки для []. См. Википедию


person Adriaan    schedule 08.12.2016    source источник


Ответы (2)


Как MATLAB предупреждает вас: Use parentheses to group if necessary. В вашем случае это необходимо. Вы хотите, чтобы .' применялось к 1:N, поэтому используйте круглые скобки (). Квадратные скобки [] предназначены для сбора элементов внутри, но 1:N уже собраны

A=(1:N).';
person Solstad    schedule 08.12.2016
comment
квадратные скобки в собранном массиве в основном действуют как круглые скобки, так как массив уже собран Я предполагаю, что, хотя их можно использовать таким образом, они, вероятно, замедляют работу (из-за операции конкатенации/сбора ), по сравнению с использованием круглых скобок - person Luis Mendo; 08.12.2016
comment
@LuisMendo Я согласен; лишние квадратные скобки - это операция. - person Solstad; 08.12.2016
comment
@LuisMendo это, вероятно, основная причина, по которой MATLAB выдает мне это предупреждение, потому что, если бы не было разницы во времени выполнения, не было бы необходимости предупреждать вас об использовании разных квадратных скобок / круглых скобок / как бы вы ни хотели их называть. - person Adriaan; 08.12.2016

Квадратные скобки используются для объявления массивов. Однако синтаксис MATLAB устроен так, что 1:n уже создает массив.

[1:3] тогда будет эквивалентно [[1 2 3]], поэтому MATLAB говорит вам, что в этом случае квадратные скобки не нужны.

При этом вам обязательно нужно сгруппировать объявление массива со скобками перед транспонированием из-за приоритет оператора

person BillBokeey    schedule 08.12.2016