我有一个像这样的矩阵:
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;]
答案 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
isnan(A)
返回与A
大小相同的逻辑数组,其中(逻辑1
表示NaN
而0
表示非NaN
- isnan
请注意, 要使用A == ~NaN
功能。特别是,表达式A
是无用的:它只返回一个与0
大小相同但充满(逻辑)NaN == NaN
的逻辑数组。为什么?因为,根据浮点运算,0
总是返回" false" (即MATLAB中的逻辑~
。)
然后,通过将MATLAB的非运算符(A
)应用于此,您将得到一个与1
大小相同的逻辑数组,其中NaN
表示非0
和NaN
一个sum(~isnan(A), 2)
。
最后,1
返回一个列向量,其中第i个条目对应于{{1的第i行上的逻辑~isnan(A)
的数量}}
生成的列向量正是您想要的:NaN
中非A
条目的逐行计数。