如果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]
并且您想要计算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”(即MATLAB中的逻辑0).
>然后,通过应用MATLAB的非运算符(〜),得到一个与A大小相同的逻辑数组,其中1表示非NaN,0表示NaN.
>最后,sum(~isnan(A),2)返回列向量,其中第i个条目对应于~isnan(A)的第i行上的逻辑1的个数.
生成的列向量正是您想要的:A中非NaN条目的逐行计数.