【发布时间】:2019-11-24 20:47:45
【问题描述】:
我正在尝试初始化一个大小为 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) [with Derived = Eigen::Matrix; Eigen::Index = long int]: 断言 `((SizeAtCompileTime == Dynamic && (MaxSizeAtCompileTime==Dynamic || size=0' 失败。 中止(核心转储)
【问题讨论】:
-
您有 450GB 的连续可用 RAM 吗?如果是稀疏数据,应该使用稀疏数据结构
-
“有什么建议可以解决这个问题吗?” 我的建议是过度考虑你的程序逻辑,因为通常人们不需要包含 600 亿个元素的向量。你想做什么?如果您发布您的代码并描述您想用它解决的问题,也许我们可以推荐一个更好的方法。
-
除非您有足够的内存,否则这只会导致错误分配:godbolt.org/z/KoNMjE。如果你得到上面的断言,你正在做一些奇怪的事情。发布minimal reproducible example!
-
感谢大家的帮助。实际上,这 600 亿个元素是来自一个巨大的稀疏矩阵的非零元素。我想我会将它们保存在一个矩阵中,然后从其他矩阵中访问它们的行和列。