计算2D数组的每行中的非NaN值的数量

时间:2015-01-15 12:42:34

标签: matlab nan

我有一个像这样的矩阵:

A = [1,  2,  3,  4,  5,  NaN,  NaN,  NaN,  NaN,  NaN;
     1,  2,  3,  4,  5,  6,    7,    NaN,  NaN,  NaN;
     1,  2,  3,  4,  5,  6,    7,    8,    9,    10]

我想知道如何计算每行中除NaN之外的值的数量。 所以我会得到一个输出:

output = [5;
          7;
          10;]

1 个答案:

答案 0 :(得分:7)

如果A是2D数组,例如

A = [1,  2,  3,  4,  5,  NaN,  NaN,  NaN,  NaN,  NaN;
     1,  2,  3,  4,  5,  6,    7,    NaN,  NaN,  NaN;
     1,  2,  3,  4,  5,  6,    7,    8,    9,    10]

并且您想要计算NaN每行A条目的数量,您只需使用

>> sum(~isnan(A), 2)

ans =
   5
   7
  10

击穿

  1. isnan(A)返回与A大小相同的逻辑数组,其中(逻辑1表示NaN0表示非NaN - isnan

    请注意, 要使用A == ~NaN功能。特别是,表达式A是无用的:它只返回一个与0大小相同但充满(逻辑)NaN == NaN的逻辑数组。为什么?因为,根据浮点运算,0总是返回" false" (即MATLAB中的逻辑~。)

  2. 然后,通过将MATLAB的非运算符(A)应用于此,您将得到一个与1大小相同的逻辑数组,其中NaN表示非0NaN一个sum(~isnan(A), 2)

  3. 最后,1返回一个列向量,其中第i个条目对应于{{1的第i行上的逻辑~isnan(A)的数量}}

  4. 生成的列向量正是您想要的:NaN中非A条目的逐行计数。