Хорошо, вот что происходит. s
вероятно инициализируется пустой ячейкой (ПРИМЕЧАНИЕ: не обязательно должен быть полностью пустым - см. Последний абзац). Таким образом, индексирование элемента s
как s{i,3}
возвращает []
. Операция MATLAB для удаления элемента вектора:
C(i)=[];
Таким образом, когда вы проходите цикл, вы удаляете элементы C
один за другим, и в итоге индекс i
превышает размер (теперь уменьшенного) вектора.
Вот небольшой пример, который воспроизводит вашу проблему:
s=cell(10,5); %#initialize s to an empty cell
%#note that any cell returns []
s{3,4}
ans =
[]
%#This is your code from above
C=zeros(10,1); %#initialize C
for i=1:size(C,1)
C(i)=s{i,3};
end
??? Индекс удаляемого элемента превышает размеры матрицы.
Вы увидите, что индекс i
, когда вы получите эту ошибку numel(C)/2+1
. Другими словами, до i=5
(в этом примере) вы удаляете каждый нечетный элемент C
, а при i=6
количество элементов, остающихся в C
, равно 5, и поэтому вы получаете индекс ошибки границ.
Примечание:
s
даже не должно быть полностью пустым. Рассмотрим этот пример:
s=cell(10,1);
s([1,2,6,8])=num2cell(rand(4,1));
C=zeros(10,1);
for i=1:numel(C)
C(i)=s{i};
end
* 1 034 * ??? Индекс удаляемого элемента превышает размеры матрицы.