Arrays 如何在Matlab中从结构数组中删除包含NaN的项?

Arrays 如何在Matlab中从结构数组中删除包含NaN的项?,arrays,matlab,struct,Arrays,Matlab,Struct,我有一个结构数组a: a(1).s1 = NaN a(2).s1 = 2 a(3).s1 = 4 a(4).s1 = 3 a(1).s2 = 1 a(2).s2 = NaN a(3).s2 = NaN a(4).s2 = 5 理想情况下,我希望创建另一个结构数组b,其中s2包含NaN,而不包含条目。因此,新数组b如下所示: b(1).s1 = NaN b(2).s1 = 3 b(1).s2 = 1 b(2).s2 = 5 i = 1; for i = find(all(~isnan([a

我有一个结构数组
a

a(1).s1 = NaN
a(2).s1 = 2
a(3).s1 = 4
a(4).s1 = 3

a(1).s2 = 1
a(2).s2 = NaN
a(3).s2 = NaN
a(4).s2 = 5
理想情况下,我希望创建另一个结构数组
b
,其中
s2
包含
NaN
,而不包含条目。因此,新数组
b
如下所示:

b(1).s1 = NaN
b(2).s1 = 3

b(1).s2 = 1
b(2).s2 = 5
i = 1;
for i = find(all(~isnan([a(1:4).s2]), 1));
    b(i).s1 = a(i).s1;
    b(i).s2 = a(i).s2;
end
b = a(~isnan([a.s2]));
我需要自动完成此操作,以便将脚本应用于更大的结构数组

我一直在尝试创建这样的for循环:

b(1).s1 = NaN
b(2).s1 = 3

b(1).s2 = 1
b(2).s2 = 5
i = 1;
for i = find(all(~isnan([a(1:4).s2]), 1));
    b(i).s1 = a(i).s1;
    b(i).s2 = a(i).s2;
end
b = a(~isnan([a.s2]));
但它保留空条目

再次尝试删除带有
NaN
的条目:

b = a;
i = 1;
for i = find(all(isnan([b(1:4).s2]), 1));
    b(i) = [];
end
仅适用于第一个
NaN
。然后它将丢失
i
count并删除不正确的条目


如果有人知道怎么做,请帮助我。

您已经很快解决了这个问题,但是for循环有点问题,所以您应该使用如下数组公式:

b(1).s1 = NaN
b(2).s1 = 3

b(1).s2 = 1
b(2).s2 = 5
i = 1;
for i = find(all(~isnan([a(1:4).s2]), 1));
    b(i).s1 = a(i).s1;
    b(i).s2 = a(i).s2;
end
b = a(~isnan([a.s2]));

我希望这会对您有所帮助。

您比我快了一秒钟,使用了大致相同的解决方案。注意:您可以删除
find
并使用线性索引,这提供了一个更短、更高效的解决方案:
b=a(~isnan([a.s2])
@hbaders您是对的,它在大型结构阵列上更高效。我将更新解决方案。啊,它非常简单!非常感谢,它对我的大型阵列也有效