J'attribue un tableau 3D, qui contient des informations pour un certain nombre de loadcases différentes. Chaque ligne du tableau définit un cas particulier (dont il y en a 3) et j'aimerais supprimer le cas de charge (c'est-à-dire la ligne) si TOUS les éléments de la ligne (en 3D) sont égaux à zéro.Comment est-ce que je supprime une dimension de tableau où les éléments somme à zéro?
Le code je en ce moment est:
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
À l'heure actuelle, la boucle je retirer les lignes provoque une erreur d'indexation, comme la taille des changements de matrice dans la boucle.
Quelqu'un peut-il voir une solution pour cela?
un problème ... 'Array (i,:, :)' est en fait un tableau à trois dimensions (1 par 5 par 4 en utilisant l'exemple de la question). Vous devez donc appliquer ANY au moins deux fois: 'valid (i) = any (any (Array (i,:, :))); – gnovice
Bonne prise! J'ai corrigé l'exemple et noté que vous pouvez également utiliser la forme. – Marc
Vous devriez aussi pouvoir dire "valide (i) = any (Array (i, :))" – Nzbuu