我正在分配一個3D數組,其中包含許多不同工況的一些信息。數組中的每一行定義了一個特定的工況(其中有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
此刻,for循環我必須刪除的行引起的索引錯誤,因爲在迴路中的陣列的大小變化。
任何人都可以看到這方面的工作?
一個問題... '陣列(I,:,:)'實際上是一個3維數組(使用問題中的示例,1乘5乘4)。因此,您必須至少應用任意兩次:'valid(i)= any(any(Array(i,::)));'。 – gnovice 2010-04-04 04:16:45
好抓!我修正了這個例子,並指出你也可以使用重塑。 – Marc 2010-04-04 14:44:05
你應該也可以說「valid(i)= any(Array(i,:))」 – Nzbuu 2010-04-06 12:30:32