gpt4 book ai didi

matlab - 如何删除元素总和为零的数组维度?

转载 作者:行者123 更新时间:2023-12-04 06:55:58 27 4
gpt4 key购买 nike

我正在分配一个 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 循环会导致索引错误,因为循环中数组的大小发生了变化。

任何人都可以看到解决此问题的方法吗?

最佳答案

这是循环的替代方法,使用函数 ALLlogical indexing :

isAllZero = all(all(Array == 0,3),2);  %# Logical index of rows with all zeroes
Array = Array(~isAllZero,:,:); %# Keep rows that have non-zero values
%# Or...
Array(isAllZero,:,:) = []; %# Set rows with all zeroes to the empty matrix

关于matlab - 如何删除元素总和为零的数组维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572397/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com