【问题标题】:Bad alloc exception thrown when using SVD from Eigen library使用 Eigen 库中的 SVD 时抛出错误的分配异常
【发布时间】:2020-08-05 17:25:52
【问题描述】:

在我的应用程序中,我想从具有double 条目的给定数据矩阵中获取左奇异向量,在代码中给出为

Eigen::MatrixXd m;

尺寸 45 x 904140。现在我在 Eigen 库中使用构造函数进行 SVD 分解,如下所示

Eigen::BDCSVD<Eigen::MatrixXd> svd(m, Eigen::ComputeFullU | Eigen::ComputeFullV);

在那里,抛出了一个错误的分配异常,更准确地说:

Unhandled exception at 0x00007FFA058850D8: Microsoft C++ exception: std::bad_alloc at memory location

【问题讨论】:

  • 你能把完整的错误放在你的问题中
  • @GenoC 我现在做了。
  • 计算完整的V 矩阵需要一个904140*904140 双矩阵(大约需要6TiB)。你真的需要完整的V,还是Eigen::ComputeThinV 就足够了?
  • @chtz Thin SVD 意味着V 在这种情况下具有尺寸9044140x45,对吗?我想使用 V 的列来跨越一个特定大小的子空间,在我的应用程序中,67。这就是我使用完整 SVD 的原因,因为我只会得到一个 45 的子空间和薄 SVD。

标签: c++ eigen svd bad-alloc


【解决方案1】:

错误std::bad_alloc 通常表示没有足够的内存来完成您的任务。

您可能无法在您的机器上计算需要 904140 x 904140 的矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2021-04-14
    相关资源
    最近更新 更多