计算二维数组每行中非 NaN 值的数量

Posted

技术标签:

【中文标题】计算二维数组每行中非 NaN 值的数量【英文标题】:Count the number of non-NaN values in each row of a 2D array 【发布时间】:2015-03-13 20:45:07 【问题描述】:

我有一个这样的矩阵:

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]

我想知道如何计算每行中不包括任何NaNs 的值的数量。 所以我会得到如下输出:

output = [5;
          7;
          10;]

【问题讨论】:

【参考方案1】:

如果A是一个二维数组,例如

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]

而你想计算A每一行的NaN条目数,你可以简单地使用

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

ans =
   5
   7
  10

故障

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

    请注意,您必须在此处使用isnan 函数。特别是,表达式A == ~NaN 是无用的:它只会返回一个与A 大小相同但充满(逻辑)0 的逻辑数组。为什么?因为,根据浮点运算,NaN == NaN 总是返回“false”(即逻辑 0,在 MATLAB 中)。

    然后,通过对其应用 MATLAB 的非运算符 (~),您将得到一个与 A 大小相同的逻辑数组,其中1 表示非NaN0 一个@ 987654343@.

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

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

【讨论】:

sum(A @JoeSerrano 真的!那行得通。但是,是的,isnan 更清晰。

以上是关于计算二维数组每行中非 NaN 值的数量的主要内容,如果未能解决你的问题,请参考以下文章

提取数组中非 NaN 元素的索引和值的正确方法

仅当满足每行元素的条件时,才计算二维数组特定列的均值和方差

如何使用二维数组计算和存储来自其他数组的值的频率?

稀疏数组

如何迭代或递归确定二维数组中的邻居?

二维数组的 每行的元素个数必须一样吗?