Задача
У меня есть матрица M, которая выглядит следующим образом:
M = [1, 1, 0, 1, 0, 0, 0;
0, 1, 1, 0, 1, 0, 0;
0, 0, 1, 1, 0, 1, 0;
0, 0, 0, 1, 1, 0, 1;
1, 0, 0, 0, 1, 1, 0;
0, 1, 0, 0, 0, 1, 1;
1, 0, 1, 0, 0, 0, 1];
Общее количество единиц во всех столбцах равно 21:
Total_ones_in_cols = 21;
Затем я предварительно выделяю память, чтобы найти индексы строк каждого столбца в M:
row_indices = zeros(1,Total_ones_in_cols);
Следующий шаг - найти индексы строк для всех столбцов:
for i = 1:7
Temp = find(M(:,i));
row_indices = [row_indices, Temp.'];
end
Вопрос
Несмотря на предварительное выделение row_indices, MATLAB по-прежнему рекомендует в цикле предварительно распределять row_indices для скорости. Может кто-нибудь объяснить, почему это так? Я предполагаю, что, поскольку я постоянно изменяю размер row_indices в цикле, предыдущая память, которую я предварительно выделил, перезаписывается и удаляется, что по сути означает, что выполненное мной предварительное распределение становится бесполезным.