【问题标题】:Number of Non-NaN Rows in a 3D Matrix MATLAB3D 矩阵 MATLAB 中的非 NaN 行数
【发布时间】:2015-03-23 20:27:28
【问题描述】:

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

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    方法#1

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

    这是掌握它的构建过程-

    开始>>> 给定 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 代码中这样做现在!

    【讨论】:

    • 效果很好!谢谢。
    • 我不明白它是如何工作的。你介意解释一下吗?
    • @SanthanSalai 添加了 cmets!
    猜你喜欢
    • 1970-01-01
    • 2015-02-04
    • 2011-09-24
    • 2013-09-21
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多