计算二维数组每行中非 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]
我想知道如何计算每行中不包括任何NaN
s 的值的数量。
所以我会得到如下输出:
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
表示NaN
,0
表示非NaN
。
请注意,您必须在此处使用isnan
函数。特别是,表达式A == ~NaN
是无用的:它只会返回一个与A
大小相同但充满(逻辑)0
的逻辑数组。为什么?因为,根据浮点运算,NaN == NaN
总是返回“false”(即逻辑 0
,在 MATLAB 中)。
然后,通过对其应用 MATLAB 的非运算符 (~
),您将得到一个与 A
大小相同的逻辑数组,其中1
表示非NaN
和0
一个@ 987654343@.
最后,sum(~isnan(A), 2)
返回一个列向量,其中第 i 个条目对应于 ~isnan(A)
的第 i 行上的逻辑 1
的数量。
生成的列向量正是您想要的:逐行计数A
中的非NaN
条目。
【讨论】:
sum(A @JoeSerrano 真的!那行得通。但是,是的,isnan
更清晰。以上是关于计算二维数组每行中非 NaN 值的数量的主要内容,如果未能解决你的问题,请参考以下文章