c++ - 我可以让 Eigen::VectorXd 的大小大于大小限制 (2^32) 吗?
问题描述
我正在尝试初始化一个大小为 60,000,000,000 的 VectorXd。运行我的软件时,由于矢量大小,我收到以下错误。
有什么建议可以解决这个问题吗?
a.out: /usr/local/EasyBuild/software/Eigen/3.3.3-intel-2018a/include/Eigen/src/Core/PlainObjectBase.h:312: void Eigen::PlainObjectBase::resize(Eigen::Index ) [衍生 = Eigen::Matrix; Eigen::Index = long int]: 断言 `((SizeAtCompileTime == Dynamic && (MaxSizeAtCompileTime==Dynamic || size<=MaxSizeAtCompileTime)) || SizeAtCompileTime == size) && size>=0' 失败。中止(核心转储)
解决方案
值“Dynamic”在 Core/util/Constants.h 中定义为
//Changing the value of Dynamic breaks the ABI, as Dynamic is often used as a template parameter for Matrix.
const int Dynamic = -1;
因此,您可以通过将其重新定义为更大的类型来摆脱特定断言,例如
const long Dynamic = -1;
但是,模板参数被指定为int
整个 Eigen,因此您可能需要在很多地方更改它。另外,您应该注意上面的评论。您需要确保使用相同的修补 Eigen 版本编译链接的所有内容。
此外,您将需要不合理数量的 RAM 或交换空间才能使该程序运行。
推荐阅读
- apache-nifi - 在 Nifi 的自定义处理器中评估单个字段中的表达式和正则表达式
- c++ - 在 R 和 C++ 中编写一个始终返回值“1”的函数
- java - 有没有办法使用 ESC 命令获取热敏打印机的状态?
- javascript - 如何使用jQuery选择树中的最后一个孩子?
- javascript - Hiding DataTable div
- r - Filling the gap in the time series
- google-analytics - How to implement the Google Analytics event monitoring on a website if the standard Analytics tracking code seems not to be enough?
- android - 限制 IPackageInstallObserver 和 IPackageDeleteObserver 上的目标 API 28
- php - 无法为移动和网络平台设置操作
- android - 在 RecyclerView 适配器中使用 Glide 加载的 Gif 无法正常播放