gpt4 book ai didi

c++ - 特征矩阵乘法

转载 作者:太空狗 更新时间:2023-10-29 20:37:09 25 4
gpt4 key购买 nike

为什么在使用c++特征库的情况下做矩阵乘积时必须使用noallias()表达式?

m1.noalias() += (s1*s2*conj(s3)*s4) * m2.adjoint() * m3.conjugate()

我一直在阅读有关它的一些注释,但仍然觉得很难理解。

最佳答案

当你在做这样的求和时:

A=A+B

eigen 可以直接使用变量 A 来执行操作,因为矩阵的每个单元格都可以计算而不影响其他单元格的计算 Ai,j=Ai,j+Bi,j

当你在做这样的产品时:

A=A*B

您不能这样做,因为如果您开始计算并替换 A0,0 - 那么您将无法计算其他 A0,j

因此默认情况下 - 在执行乘积操作的赋值时,会创建一个临时结构并在之后完成赋值(参见 noalias)。

当您在赋值的源项上使用 noalias 时,您“保证”赋值的变量不是产品项的一部分,并且不使用临时结构是安全的.

这是因为 Eigen 在执行操作时是“懒惰的”(这意味着它只在必要时执行,而不是像我们在标准 C++ 中习惯的那样立即执行)- noalias是告诉 Eigen 在进行乘积操作并将其分配给变量时这样做也是安全的。

关于c++ - 特征矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com