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

时间:2015-12-05 12:03:16

标签: arrays matlab struct

我有一个struct array 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

我需要自动完成这项工作,因此我可以将脚本应用于更大的结构数组。

我一直试图像这样创建一个for循环:

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

但它保留了空条目。

使用NaN删除条目的另一次尝试:

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

仅适用于第一个NaN。然后它丢失i计数并删除不正确的条目。

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

1 个答案:

答案 0 :(得分:4)

你真的很接近解决这个问题,但for循环有点问题所以你应该使用这样的数组公式:

b = a(~isnan([a.s2]));

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