- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在 Visual Studio 中编写 C++ 代码并使用 Armadillo 7.900.1
我没有运气让 eigs_sym 函数在 Armadillo 下工作(我使用的是 Armadillo 附带的 lapack 和 blas 版本)。典型的错误信息如下:
error: lapack::stedc(): failed to compute all eigenvalues
warning: eigs_sym(): decomposition failed
产生这个输出的代码是:
sp_mat T(locations, values);
arma::eigs_sym(eigval, eigvec, T, num_eigs_wanted, "sm", tol);
在哪里
T is a 480,000x480,000 sparse matrix.
如果 T 很小(即 2000x2000)并且 tol 很高(tol = 5),我可以让代码正常工作。但是一旦 T 大约为 20000x20000,那么无论使用什么值的 tol 或 num_eigs_wanted 都会出现上述错误。 (我显然改变了“值”和位置“来改变 T 的大小)。
矩阵 T 是对称实数正定矩阵。
当我在 Matlab 中调用 eigs 函数时,完全相同的矩阵没有问题。
有什么想法吗?在我看来, Armadillo 中的 eigs_sym 似乎坏了……人们使用过任何替代品吗?
干杯
最佳答案
不是答案,但评论时间太长了。我可以用下面的代码重现。该矩阵只是一个对角矩阵,对角线上的值从1开始递增。特征值显然是1,2,3,...,矩阵是正定对称的。
#include <iostream>
#include <armadillo>
int main()
{
constexpr int N = 20000;
arma::umat locations(2,N);
arma::vec values(N);
for (int i = 0; i < N; ++i)
{
locations(0,i) = i;
locations(1,i) = i;
values(i) = i+1;
}
arma::sp_mat T(locations, values);
int num_eigs_wanted = 1;
arma::vec eigval(num_eigs_wanted);
arma::mat eigvec(N,num_eigs_wanted);
double tol = 1e-6;
arma::eigs_sym(eigval, eigvec, T, num_eigs_wanted, "sm", tol);
std::cout << eigval << '\n';
}
编译器标志是
clang++-5.0 -std=c++11 test.cpp -larmadillo
我将 Armadillo 与 MKL 后端一起使用,我收到:
warning: eigs_sym(): decomposition failed
[matrix size: 0x1]
这似乎是 Armadillo 的问题,因为当我使用 Eigen 的不受支持的 Arpack 支持时,它工作得很好。
#include <iostream>
#include <Eigen/Sparse>
#include <unsupported/Eigen/ArpackSupport>
int main()
{
constexpr int N = 20000;
std::vector< Eigen::Triplet<double> > triplets;
triplets.reserve(N);
for (int i = 0; i < N; ++i)
triplets.push_back( {i,i,i+1} );
Eigen::SparseMatrix<double> T(N,N);
T.setFromTriplets(triplets.begin(), triplets.end());
int num_eigs_wanted = 1;
double tol = 1e-6;
Eigen::ArpackGeneralizedSelfAdjointEigenSolver< Eigen::SparseMatrix<double> > eigs_sym;
eigs_sym.compute(T, num_eigs_wanted, "SM", Eigen::ComputeEigenvectors, tol);
std::cout << eigs_sym.eigenvalues() << '\n';
}
关于c++ - Armadillo eigs_sym : decomposition failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44447037/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
在开始之前,我必须说,对于那些具有线性代数背景的人来说,这不是您所知道的矩阵分解。请阅读以下段落以更清楚地了解我要解决的问题。 以下是矩阵及其子矩阵的显着属性/定义: 我有一个 SxP 矩阵,它形成了
我正在将 sklearn.decomposition.TruncatedSVD 应用于非常大的矩阵。如果矩阵超过一定大小(例如 350k x 25k),svd.fit(x) 将耗尽 RAM。 我将 s
在第 159 页的 High Performance MySQL 中,他们讨论了将复杂查询分解为简单查询: 转换 SELECT * FROM tag JOIN tag_post ON tag_post
我正在尝试了解主成分分析 的工作原理,我正在sklearn.datasets.load_iris 数据集上对其进行测试。我了解每个步骤的工作原理(例如,标准化数据、协方差、特征分解、最高特征值排序、使
我正在 Visual Studio 中编写 C++ 代码并使用 Armadillo 7.900.1 我没有运气让 eigs_sym 函数在 Armadillo 下工作(我使用的是 Armadillo
Composition root看起来很奇怪的图案。我们有一个非常大的上帝对象,它对任何事情都了如指掌。 将组合根拆分为某些模块的正确方法是什么,这些模块将封装对象图自身部分的初始化? 怎么样hier
在Jonathan Dursi的帮助下和 osgx ,我现在已经完成了进程之间的“行分解”: row http://img535.imageshack.us/img535/9118/ghostcell
我要回答的问题是: Consider R(A,B,C) with the FD A --> B. Give a vaild instance of r of R such that when we p
观察: 在P0217R3 proposal (2016-06-24) ,使用了结构化绑定(bind)术语。 在current working C++1z draft (2016-11-28) ,使用了
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
在类里面,导师发表了以下声明: 一个关系只有一个(或没有)无损 BCNF 分解, 并且两个 BCNF 分解对于给定的 R 是无损的,前提条件是它们在逻辑上相等 我试过反证法,假设有两个BCNF分解,找
我想正确设置 YouCompleteMe,这样我就不会在 C++ 文件中收到以下警告: ... auto [k,v] = mapIt; // some map iterator ... decompo
我想使用 Das Gupta(1993)分解方法通过组合效应和率效应分解生育率的变化。是否有使用 R 进行 Das Gupta 分解的代码或函数?对于 STATA,我找到了“rdecompose”,但
我正在尝试绘制 part decomposition diagram与EA10。它应该如下所示。 但我找不到方法。 EA 是否支持此 UML 图? 最佳答案 找到了。我需要先激活“更多工具...”->
我正在使用 sklearn.decomposition FactorAnalysis 对我的股票 yield 矩阵 (200*676) 进行因子分析。但我不知道如何获得因子载荷。这是我的代码的样子:
rich.main3是 R 中的线性模型。我了解列表中的其余元素,但我不明白 qraux是。文档指出它是 a vector of length ncol(x) which contains addit
根据py3 doc : unicodedata.decomposition(chr) Returns the character decomposition mapping assigned to t
每当我从 sklearn 导入任何 Tree 模块时,我都会遇到错误。示例代码如下 from sklearn.ensemble import ExtraTreesRegressor model = E
我正在尝试跟随 Abdi & Williams - Principal Component Analysis (2010) 并通过 SVD 构建主成分,使用 numpy.linalg.svd . 当我
我是一名优秀的程序员,十分优秀!