我有一个像这样的矩阵:
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]
Run Code Online (Sandbox Code Playgroud)
我想知道如何计算每行中除了任何NaNs 之外的值的数量.所以我会得到一个输出:
output = [5;
7;
10;]
Run Code Online (Sandbox Code Playgroud)
如果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]
Run Code Online (Sandbox Code Playgroud)
而且你想要计算NaN每一行的条目数A,你可以简单地使用
>> sum(~isnan(A), 2)
ans =
5
7
10
Run Code Online (Sandbox Code Playgroud)
isnan(A)返回一个大小相同的逻辑数组A,其中(逻辑1表示a NaN和0非NaN.
请注意,您必须在isnan此处使用此功能.特别是,表达式A == ~NaN是无用的:它只返回一个大小相同A但完整(逻辑)的逻辑数组0.为什么?因为,根据浮点运算,NaN == NaN总是返回"false"(即0MATLAB中的逻辑).
然后,通过将MATLAB的not运算符(~)应用于此,您将得到一个大小相同的逻辑数组A,其中1表示非NaN和0a NaN.
最后,sum(~isnan(A), 2)返回一个列向量,其中第i个条目对应1于第i行上的逻辑数~isnan(A).
生成的列向量正是您想要的:非NaN条目的计数,逐行计数A.