Art*_*sov 3 arrays matlab struct
我需要计算结构数组中所有字段中没有任何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;
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样
Fields b c
1 44 11
2 55 NaN
3 66 22
4 NaN 33
Run Code Online (Sandbox Code Playgroud)
没有NaN的结构是1和3,所以这里应该总共有2个.
我尝试过使用size(a, 2),但它只是告诉我数组中的结构总数.我需要它来计算N(样本中的观察数).NaNs不算作观察结果,因为它们在分析中被省略.
在struct数组中没有任何NaN的情况下计算结构的最简单方法是什么?
我建议使用以下一行命令:
nnz(~any(cellfun(@isnan,struct2cell(a))))
Run Code Online (Sandbox Code Playgroud)
struct2cell(a)将您的结构转换为3D单元格数组cellfun(@isnan,___)应用于单元格数组的
isnan每个元素
~any(__)沿第一维工作并返回没有NaN的数组
nnz(__)计数有多少行没有NaNs
2在这种情况下,结果只是一个数字.
下列:
find(~any(cellfun(@isnan,struct2cell(a))))
Run Code Online (Sandbox Code Playgroud)
会告诉你哪些行没有NaN
这将告诉你哪些没有NaN
for ii=1:size(a,2)
hasNoNaNs(ii)=~any(structfun(@isnan,a(ii)));
end
Run Code Online (Sandbox Code Playgroud)
它的工作方式是迭代trhoug每个结构,并使用structfun调用isnan每个它的元素,然后检查any他们的是NaN,否定的结果,因此不具有的那些给予1 NaN小号