Несбалансированная или неожиданная скобка или скобка при транспонировании

Я получил эту ошибку, когда использую MATLAB R2014a.

A = [1 2 3; 4 5 6];
A'(:) = [2 2 2 3 3 3];

Но это работает, когда я разделяю его на два этапа:

B = A';
B(:) = [2 2 2 3 3 3];

Кто-нибудь знает причину?


person flymike    schedule 30.07.2015    source источник
comment
A'(:) является недопустимым синтаксисом Matlab. Вместо этого попробуйте A(:).'. (Используйте .' вместо ' для транспонирования матрицы, а не сопряженного транспонирования). Вы не можете использовать индексацию скобок после чего-либо, кроме имени переменной.   -  person David    schedule 30.07.2015
comment
@ Дэвид, пожалуйста, опубликуй это как ответ   -  person Dan    schedule 30.07.2015
comment
@David Но A(:).' не то же самое, что сделал бы A.'(:). Вы можете использовать A = reshape([2 2 2 3 3 3], size(A,2), size(A,1));   -  person Luis Mendo    schedule 30.07.2015


Ответы (1)


В Matlab вы не можете сделать A'(:), потому что индексация должна появиться первой. Вместо этого сделайте A(:)' (или используйте reshape для лучшего контроля: reshape(A,1,[]) (я так думаю!).

Вы можете делать некоторые странные вещи, например: A{2}(:) или A.matrix(1), потому что они просто индексируют, но вы не можете делать такие вещи, как это: sum(A)(:) или A^2(:).

Еще одно техническое замечание: вы должны сделать A(:).', потому что ' выполняет сопряженное транспонирование, в отличие от .', которое выполняет транспонирование обычной матрицы. Конечно, в большинстве случаев они одинаковы, но лучше поступать правильно, и вы никогда не споткнетесь на (очень) странной ошибке!

person David    schedule 30.07.2015
comment
Вы можете упомянуть функцию transpose как эквивалент .' - person Matt; 30.07.2015
comment
Это хороший момент, и все становится намного яснее, @Matt. - person David; 31.07.2015