c++ - 复制列 VectorXd 以便在 Eigen、C++ 中构造 MatrixXd

标签 c++ eigen replicate

假设我们有一个 10x20 的实矩阵:

Eigen::MatrixXd A(10,20);
A.setRandom();

我们想构建一个 10x10 的矩阵

B = [v v ... v v]

其中 v 是长度为 10 的列 vector 。对于这个 vector 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();
}

我觉得这一步没有for循环是解决不了的。我怎样才能将此列复制 10 次,以便如上所述填充 B

最佳答案

你的假设是错误的。可以通过执行 rowwise 来避免循环手术。然后,replication可以按如下方式完成。

#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;
}

也可以单行写成

    B =  A.rowwise().squaredNorm().replicate(1,10);

我强烈推荐阅读 documentation .写的不错。

关于c++ - 复制列 VectorXd 以便在 Eigen、C++ 中构造 MatrixXd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280290/

相关文章:

c++ - 如何为特征向量启用复制消除 move 成员?

c++ - 动态分配随机特征向量Xd

c++ - Eigen :将浮点矩阵乘以 bool vector

r - 将代表扩展到矩阵?

java - 分布式环境下的defaultCache和cache问题(数据不一致)

c++ - 我可以合法地将指向结构成员的指针强制转换为指向该结构的指针吗?

c++ - 如何让编译器在赋值时计算出模板类参数?

c++ - 使用巨大的 Valgrind 和低级 C++ API

c++ - 我试图通过 C++ 中的相关实验室作业来理解类里面给出的伪代码

Haskell:递归复制函数