c++ - 在 Eigen C++ 中广播(两个) vector

标签 c++ eigen broadcasting

假设我有一个大小为 3 的输入 ArrayXd:

P[1]                   
P[2]                 
P[3]                 

我需要的对称 MatrixXd 大小为 [3,3]:

-P[1]*P[1]+P[1]   -P[2]*P[1]         -P[3]*P[1]  
-P[1]*P[2]        -P[2]*P[2]+P[2]    -P[3]*P[2]
-P[1]*P[3]        -P[2]*P[3]         -P[3]*P[3]+P[3] 

伪代码解决方案:

-1.0 * P.broadcast.rowwise() * P.broadcast.colwise() + diag(P)

问题: Eigen 手册解释说您可以广播 vector ,但只能与矩阵(或二维数组)结合使用。用两个 vector 是怎么做到的?

最佳答案

你正在寻找一个外积,它就是一个标准矩阵积:

-P * P.transpose() + P.asDiagonal()

关于c++ - 在 Eigen C++ 中广播(两个) vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56502569/

相关文章:

c++ - Eigen 错误 : INVALID_MATRIX_PRODUCT multiplying vector and matrix

c++ - Eigen 模板库Random()方法算法

ubuntu - 通过 RTMP 从 headless 服务器广播

c++ - 没有已知的从 std::ostream* 到 std::ostream& 的转换

c++ - 将 double 分配给 int 数组时的类型转换

c++ - 使用 Qt 过滤 QFileInfoList 文件

Node.js Express websocket 不向所有连接的客户端广播

c++ - 是否可以通过模板类型更改静态 const 类成员的值?

c++ - 如何构造大小为 1000*1000 的特征矩阵

security - socket.io 是否只向订阅者广播?