我有一个3D
矩阵,NaN
填充,以便在每个2D
矩阵中获得相同数量的行,即每个(:,:,ind)
。现在我需要找到每个(:,:,ind)
中实际非NaN行的数量。
我需要的一个简单例子:
% Input:
A(:,:,1) = [ 1 1;
2 2;
NaN NaN];
A(:,:,2) = [ 2 2;
NaN NaN;
NaN NaN];
% Function call:
B = callingfunction(A);
% Output:
B = [2 1] % Number of Non-NaN rows in each 2D Matrix
答案 0 :(得分:4)
B = squeeze(sum(all(~isnan(A),2),1))
这是建立起来的过程 -
<强>开始&gt;&GT;&GT;鉴于A:
>> A
A(:,:,1) =
1 1
2 2
NaN NaN
A(:,:,2) =
2 2
NaN NaN
NaN NaN
1)检测所有非NaN位置:
>> ~isnan(A)
ans(:,:,1) =
1 1
1 1
0 0
ans(:,:,2) =
1 1
0 0
0 0
2)查找具有all
非Nan元素的行:
>> all(~isnan(A),2)
ans(:,:,1) =
1
1
0
ans(:,:,2) =
1
0
0
3)总结所有这些行的数量:
>> sum(all(~isnan(A),2),1)
ans(:,:,1) =
2
ans(:,:,2) =
1
4)将结果作为一维数组获取:
>> squeeze(sum(all(~isnan(A),2),1))
ans =
2
1
B = squeeze(sum(~any(isnan(A),2),1))
使用前面列出的 break-up-my-code-into-pieces 进程以及所有未来的MATLAB代码和所有过去没有意义的MATLAB代码现在!