Присоединение строки / столбца другого размера к массиву. - PullRequest
0 голосов
/ 23 ноября 2018

Недавно я столкнулся с таким поведением в Matlab, и мне любопытно узнать, почему это происходит.

a(1,:) = rand(4,1);
a(2,:) = rand(5,1);

Это вызывает у меня Subscripted assignment dimension mismatch. ошибку, тогда как

a(1,:) = rand(4,1);
a(2,1:5) = rand(5,1);

настраивает массив на максимальный размер столбца и добавляет ноль к более коротким.

Мой вопрос: почему первый фрагмент кода не делает то, что делает второй (что мне кажется очень логичным)?Я не вижу причин, по которым прежний фрагмент кода должен работать так, как он работает.Или я что-то упустил?

1 Ответ

0 голосов
/ 23 ноября 2018

С a(2,:) = rand(5,1); вы пытаетесь назначить вектор 5x1 для столбца матрицы 4x1.Отсюда ошибка.

При a(2,1:5) = rand(5,1); вы явно ссылаетесь на 5-ю строку, которая говорит механизму Matlab соответствующим образом расширить матрицу перед попыткой операции присваивания.Следовательно, это будет успешносделать.Конечно, я могу определить намерения разработчиков Mathworks только тогда, когда они определяют поведение своего языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...