【发布时间】: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。