三维矩阵MATLAB中的非NaN行数

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

标签: matlab matrix

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

1 个答案:

答案 0 :(得分:4)

方法#1

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

方法#2

B = squeeze(sum(~any(isnan(A),2),1))

使用前面列出的 break-up-my-code-into-pieces 进程以及所有未来的MATLAB代码和所有过去没有意义的MATLAB代码现在!