我需要计算在结构数组中的所有字段中有多少个结构没有NaN。示例结构如下所示:
a(1).b = 11;
a(2).b = NaN;
a(3).b = 22;
a(4).b = 33;
a(1).c = 44;
a(2).c = 55;
a(3).c = 66;
a(4).c = NaN;
输出看起来像这样
Fields b c
1 44 11
2 55 NaN
3 66 22
4 NaN 33
没有NaN的结构是1和3,因此这里总共应该有2个。
我尝试使用size(a, 2)
,但它只告诉我数组中结构的总数。我需要它来计算N(样本中的观察数)。NaN不计为观察值,因为分析中将其省略。
计算结构数组中没有任何NaN的结构的最简单方法是什么?
我建议使用以下单行命令:
nnz(~any(cellfun(@isnan,struct2cell(a))))
struct2cell(a)
将您的结构转换为3D单元格数组,cellfun(@isnan,___)
将其应用于沿第一维工作isnan
的单元格数组的每个元素,~any(__)
并返回没有NaN的数组nnz(__)
计算有多少行没有NaN的数组
2
在这种情况下,结果只是一个数字。
以下:
find(~any(cellfun(@isnan,struct2cell(a))))
会告诉您哪些行没有NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句