Невозможно выполнить назначение, потому что левая и правая стороны имеют разное количество элементов - PullRequest
0 голосов
/ 12 марта 2019

У меня есть массив StartMeasuring,, который заполнен 10 числами.Я хотел бы заполнить матрицу Depth 10 массивами с обратным отсчетом до нуля от чисел в StartMeasuring.

StartMeasuring=randi([10 30],1,10);
lenDepth =len(StartMeasuring);
Depth=NaN(lenDepth,30);

for i=1:lenDepth
    Depth(i)=StartMeasuring(i):-1:0;
end

Я попытался создать цикл for и заменить матрицу на NaN., но я получаю ошибку:

Unable to perform assignment because the left and right sides have a different number of elements.

Error in sd (line 53)
    Depth(i)=StartMeasuring(i):-1:0;

Я не понимаю, почему я получаю эту ошибку, так как Depth и StartMeasuring имеют размер 10.

1 Ответ

2 голосов
/ 12 марта 2019
StartMeasuring=randi([10 30],1,10);
lenDepth = length(StartMeasuring); % numel is preferred
Depth = NaN(lenDepth,31);

for ii = 1:lenDepth
    Depth(ii,1:StartMeasuring(ii)+1) = StartMeasuring(ii):-1:0;
end

Индексирование по единственному числу, как вы это делали изначально, не удивительно, что единственный элемент матрицы. Вместо этого индексируйте в строку как одно число, позволяя ему заполнить все столбцы на основе выражения. Подробнее об индексации в этом замечательном посте .

Также размер StartMeasuring(ii):-1:0 является случайным между 30 и 1, что означает, что вы должны хранить его на основе его текущей длины, которая в вашем случае (целые числа) задается как StartMeasuring(ii)+1.

Рисунок, показывающий imagesc(Depth):

enter image description here


Обратите внимание, что я изменил несколько других вещей:

  • len - это Python, а не MATLAB. Используйте length или, предпочтительно, для 1D массивов numel
  • пробелы вокруг оператора присваивания = делают для лучшей читаемости
  • i и j являются мнимыми единицами , и их обычно не используют в качестве имен переменных в MATLAB.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...