Я назначаю трехмерный массив, который содержит некоторую информацию для нескольких различных фреймов. Каждая строка в массиве определяет конкретный регистр загрузки (из которых 3), и я хотел бы удалить загрузочный ящик (т. Е. Строку), если ВСЕ элементы строки (в 3D) равны нулю.Как удалить размер массива, где элементы суммируются до нуля?
код у меня на данный момент:
Array = zeros(3,5) %# Initialise array
Numloadcases = 3;
Array(:,:,1) = [10 10 10 10 10;
0 0 0 0 0;
0 0 0 0 0;]; %# Expand to a 3D array
Array(:,:,2) = [10 10 10 10 10;
0 0 0 0 0;
0 0 0 0 0;];
Array(:,:,3) = [10 10 10 10 10;
0 0 0 0 0;
0 0 20 0 0;];
Array(:,:,4) = [10 10 10 10 10;
0 0 0 0 0;
0 0 20 0 0;];
%# And to remove the second row:
for i = 1:Numloadcases
if sum(Array(i,:,:)) == 0
Array(i,:,:) = [];
end
end
В настоящее время, для цикла я должен удалить строки вызывает ошибку индексации, так как размер массива изменяется в цикле.
Может ли кто-нибудь увидеть работу вокруг этого?
Одна проблемы ... 'Array (я,:, :)' на самом деле представляет собой 3-мерный массив (1 на 5-на-4, используя пример в вопросе). Поэтому вы должны применять ANY как минимум дважды: 'valid (i) = any (any (Array (i,:, :)));'. – gnovice
Хорошая добыча! Я исправил пример и отметил, что вы также можете изменить форму. – Marc
Вы также можете сказать «valid (i) = any (Array (i, :))» – Nzbuu