如何声明特征矩阵,然后通过嵌套循环初始化它
How to declare Eigen matrix and then initialize it through nested loop
我想做标题中写的事情,我尝试了以下代码:
typedef std::vector<std::vector<std::vector<double>>> Tensor;
// should return a matrix of shape (batch_size, 1840)
Eigen::MatrixXd flatten(Tensor x)
{
int channels = x.size(); // always 10
int batch = x[0].size(); // varies
int columns = x[0][0].size(); // always 184
Eigen::Matrix<double, Eigen::Dynamic, 1840> matrix;
for (unsigned int b = 0; b < batch; b++)
{
for (unsigned int i = 0; i < columns; i++)
{
for (unsigned int c = 0; c < channels; c++)
{
matrix << x[c][b][i]; // I also tried this: matrix(b, i+c) = x[c][b][i];
}
}
}
return matrix;
}
但代码要么中止abort() has been called
消息,要么给我一个Access violation writing location 0x0000000000000000
完成我想做的事情的正确方法是什么?
你从来没有告诉矩阵应该是什么大小。在写入矩阵之前,你必须调整矩阵的大小。
Eigen::Matrix<double, Eigen::Dynamic, 1840> matrix;
matrix.resize(batch, 1840);
for (unsigned int b = 0; b < batch; b++)
...
代码的第二个问题是operator<<
的行为与std容器的push_back
不同。它一次初始化整个(大小合适的(矩阵,而不是使用NxMxL调用。
与代码无关的一个性能问题是,Tensor x
是按值传递的,从而导致复制。代之以传递(const(引用:
Eigen::MatrixXd flatten(const Tensor& x)
{ ...
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 了解嵌套循环打印星号图案
- 无法掌握嵌套循环的写作技巧
- 在 c++ 中实现嵌套循环的更短方法吗?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 毕达哥拉斯三重嵌套循环误解
- T(n) 表示嵌套循环
- 2 个嵌套循环的时间复杂度
- 嵌套循环背后的逻辑
- 使用 %s C++嵌套循环
- 嵌套循环和重复迭代器
- 如何在 c++ 下使用嵌套循环和正则表达式降低时间复杂度?
- C++在乘法图中放置随机值(嵌套循环)
- 如何使用 OpenMP 减少嵌套循环?
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- 学习嵌套循环C++与示例混淆
- 如何在CUDA中嵌套循环
- std::vector上的嵌套循环
- 具有动态数组分配的OpenMP嵌套循环
- 两个嵌套循环的运行时间复杂性:二次型还是线性