gpt4 book ai didi

c++ - 将 vector 分配给 Eigen 中的矩阵列

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:39 24 4
gpt4 key购买 nike

这个问题是匆忙提出的。我原来程序中的错误不是此处显示的代码中的拼写错误。错误是在我的程序中,由于某些情况 v 没有被填充。

这个线程更有用的收获是在已接受的答案中将 std::vector 复制到特征矩阵的所有行或列的演示。


我想将 vector 复制到矩阵的列中,如下所示:

#include <Eigen/Dense>
#include <vector>
#include <iostream>

int main() {

int m = 10;

std::vector<Eigen::VectorXd> v(m);
Eigen::MatrixXd S(m,m);

for (int i = 0; i != m; ++i) {
v[i].resize(m);
for (int j = 0; j != m; ++j) {
v[i](j) = rand() % m;
}
//S.cols(i) = v[i]; //needed something like this
}

return 0;
}

S 的类型为 Eigen::MatrixXd,维度为 mxm。 v 是 Eigen::VectorXd 的 std::vector,其中每个 Eigen::VectorXd 的大小为 m,v 中有 m 个。

最佳答案

关于原始问题,您需要用 Eigen::Map 包装 std::vector。您也可以/应该将操作设为单线操作。

改写后的问题被简化为拼写错误。 S.cols(i) 应该是 S.col(i)

int main()
{
size_t sz = 6;
Eigen::MatrixXd S(sz, sz);
std::vector<double> v(sz);
std::vector<Eigen::VectorXd> vv(sz);
for(int i = 0; i < sz; i++)
{
v[i] = i*2;
vv[i] = Eigen::VectorXd::LinSpaced(sz, (i+sz), (i+sz)*2);
}

for (int i = 0; i != sz; ++i)
S.col(i) = vv[i];
std::cout << S << "\n\n";

S.rowwise() = Eigen::Map<Eigen::RowVectorXd>(v.data(), sz);
std::cout << S << "\n\n";

S.colwise() = Eigen::Map<Eigen::VectorXd>(v.data(), sz);
std::cout << S << "\n\n";

return 0;
}

输出结果

6 7 8 9 10 11
7.2 8.4 9.6 10.8 12 13.2
8.4 9.8 11.2 12.6 14 15.4
9.6 11.2 12.8 14.4 16 17.6
10.8 12.6 14.4 16.2 18 19.8
12 14 16 18 20 22

0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10

0 0 0 0 0 0
2 2 2 2 2 2
4 4 4 4 4 4
6 6 6 6 6 6
8 8 8 8 8 8
10 10 10 10 10 10

关于c++ - 将 vector 分配给 Eigen 中的矩阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36417836/

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