Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何添加两个矩阵并消除NAN_Matlab_Nan - Fatal编程技术网

Matlab 如何添加两个矩阵并消除NAN

Matlab 如何添加两个矩阵并消除NAN,matlab,nan,Matlab,Nan,如何添加两个矩阵,并仅保留忽略NaN值的数字 例如: A=[NaN 2 NaN]; B=[1 NaN 3]; 我想要某种形式的plusC=A+B,这样: C=[1 2 3] 您可以使用(您需要统计和机器学习工具箱): 并获得: C = 1 2 3 或者,您可以与排除NaN标志一起使用: C = sum([A;B],'omitnan') 您将得到相同的结果。只需将NaNs设置为0s,然后执行求和,即可实现此目的,而无需使用任何特定的函数调用: A(A~=A)=0

如何添加两个矩阵,并仅保留忽略NaN值的数字

例如:

A=[NaN 2 NaN];
B=[1 NaN 3];
我想要某种形式的plus
C=A+B
,这样:

C=[1 2 3]
您可以使用(您需要统计和机器学习工具箱):

并获得:

C =

     1     2     3
或者,您可以与排除NaN标志一起使用:

C = sum([A;B],'omitnan')

您将得到相同的结果。

只需将
NaNs
设置为
0s
,然后执行求和,即可实现此目的,而无需使用任何特定的函数调用:

A(A~=A)=0
B(B~=B)=0
C=A+B
编辑:如@rayryeng在第一条评论中所建议的,实现这一点的另一种方法是使用
isnan

A(isnan(A))=0
B(isnan(B))=0
C=A+B

我建议使用
isnan
而不是
A~=A
B~=B
。不仅意图更加明确,而且某些CPU可能不会产生预期的答案。执行
isnan
不会产生歧义。鉴于
A~=A
A(isnan(A))=0的工作原理相同,我认为第一个更巧妙,因为它不使用任何特定的函数调用。无论如何,我不知道CPU依赖性问题,并添加了您的建议作为对答案的编辑。谢谢你的帮助@havakok,请记住,这种方法的警告是,您需要修改原始变量,或者创建它们的另一个副本。如果它们很大,或者如果你有很多,这可能是一个限制,也可能只是一个负担。@EBH,我明白你的意思,但至少我们这样做不会丢失重要信息!尽管我找不到Matlab的
sum
实现,但我认为他们在实现中使用
isnan
来处理
ommitnan
includenan
开关,我认为这可能会造成与我们在答案中相同的开销。@hmofrad是的,你是正确的。在函数内部,它们只需将所有NaN值设置为0,并使用
isnan
。另外,
sum
是一个内部函数,它调用LAPACK-FORTRAN库的包装器,这就是您无法看到实际源代码的原因。顺便说一句,侦察得不错
A(isnan(A))=0
B(isnan(B))=0
C=A+B