nul*_*tto 2 c++ replicate eigen
假设我们有一个 10x20 的实矩阵:
Eigen::MatrixXd A(10,20);
A.setRandom();
Run Code Online (Sandbox Code Playgroud)
我们想构造一个 10x10 的矩阵
B = [v v ... v v]
其中v是长度为 的列向量10。对于这个向量,v,每个元素都是 A 的每一行的平方范数,即:
v = ( ||x_1||^2, ||x_2||^2, ..., ||x_10||^2,)^T,
其中x_j表示 A 的第 j 行。
构造矩阵的最有效方法是B什么?
我可以构造v如下:
Eigen::VectorXd v(10);
for (int i=1; i<10; i++)
{
v(i) = A.row(i).squaredNorm();
}
Run Code Online (Sandbox Code Playgroud)
我认为这一步没有for循环是无法解决的。我怎么能复制这个列 10 次,这样B就如上面所讨论的那样填充了?
你的假设是错误的。可以通过执行rowwise操作来避免循环。然后,可以按如下方式进行复制。
#include <iostream>
#include <Eigen/Core>
int main ()
{
Eigen::MatrixXd A(10,20), B, C;
A.setRandom();
Eigen::VectorXd v(10);
v = A.rowwise().squaredNorm();
B = v.replicate(1,10);
std::cout << B << "\n\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
也可以一行写成
B = A.rowwise().squaredNorm().replicate(1,10);
Run Code Online (Sandbox Code Playgroud)
我强烈建议阅读文档。写的挺好的
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |