标签: arpack

使用Matlab 2013a进行标准化切割

我正在使用http://www.cis.upenn.edu/~jshi/software/Ncut_9.zip中的规范化剪切包 (在Windows 7上)

这曾经与Matlab2010a一起使用.但是我已升级到Matlab2013a(32位学生版),现在我收到以下错误:

Error using arpackc
Expect 2 output arguments

Error in eigs_new (line 240)
        arpackc( aupdfun, ido, ...

Error in ncut (line 83)
[vbar,s,convergence] =
eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P));

Error in ncutW (line 9)
[NcutEigenvectors,NcutEigenvalues] =
ncut(W,nbcluster);

Error in NcutImage (line 18)
[NcutDiscrete,NcutEigenvectors,NcutEigenvalues]
= ncutW(W,nbSegments);

Error in demoNcutImage (line 25)
[SegLabel,NcutDiscrete,NcutEigenvectors,NcutEigenvalues,W,imageEdges]=
NcutImage(I,nbSegments);
Run Code Online (Sandbox Code Playgroud)

显然,该new_eigs()函数ncuts与最新的Matlab中的ARPACK版本不兼容.

  • 有人知道解决方法吗?
  • 规范化使用Matlab eigs()函数的修改版本.为什么我不能只使用Matlab的内置eigs()而不是eigs_new()(它似乎工作).

matlab cluster-analysis image-processing image-segmentation arpack

7
推荐指数
2
解决办法
5387
查看次数

ARPACK线程安全吗?

从用C编写的程序中同时使用来自不同线程的ARPACK本解析器是否安全?或者,如果ARPACK本身不是线程安全的,那么是否存在与API兼容的线程安全实现?一个快速的谷歌搜索没有发现任何有用的东西,但鉴于ARPACK在大型科学计算中被大量使用的事实,我发现成为第一个需要线程安全稀疏的本征解析器的人是非常令人惊讶的.

我对Fortran不太熟悉,所以我将ARPACK源代码翻译成C使用f2c,似乎有很多静态变量.基本上,转换例程中的所有局部变量似乎都是静态的,这意味着库本身不是线程安全的.

c fortran thread-safety arpack

6
推荐指数
2
解决办法
1283
查看次数

Arpack++ 稀疏特征求解器比等效的 Matlab eigs() 慢很多倍

我需要在 C++ 程序中计算一个非常大的稀疏对称矩阵的 n 个最小幅度特征向量。对于我的示例,假设 n=30 并且矩阵是 10k x 10k,其中大约有 70k 个非零值。

在对一些库进行大量研究和试验后,我发现 ARPACK++ 可能是我最好的选择,我按照本页中的步骤安装了它。

使用以下代码段进行计算:

// L is an Eigen library matrix
L.makeCompressed();

ARluSymMatrix<MTYPE> A(L.cols(), L.nonZeros(), L.valuePtr(), L.innerIndexPtr(), L.outerIndexPtr(), 'U');

ARluSymStdEig<MTYPE> eig(n, A, "SM");

TIC
eig.FindEigenvectors();
TOC
Run Code Online (Sandbox Code Playgroud)

这让我得到了正确的结果,但需要大约 8.5 秒,而在 Matlab 中,我只需通过调用即可在大约 0.5 秒内获得相同的结果

tic
[V,D] = eigs(L,30,'sm');
toc
Run Code Online (Sandbox Code Playgroud)

根据我对 Matlab 主题的研究,eigs()还为相同的计算调用了 ARPACK fortran 库,所以我不明白为什么 C++ 包装器如此之慢。

此外,ARPACK++ 在许多情况下的行为非常奇怪,例如当我尝试使用浮点数而不是双精度数时,程序将简单地停止并且什么都不做,直到我将其取下,或者当尝试计算 0 或 0.0001 等值附近的特征向量时,这应该相当于'SM',它只是吐出垃圾并崩溃。

因此,我怀疑 ARPACK++ 是否真的那么慢,或者所有这些都是一些错误配置/安装的症状,如果是这样,我可以做些什么来解决它。感谢您的任何帮助,您可以提供。

c++ performance sparse-matrix eigen arpack

6
推荐指数
1
解决办法
1025
查看次数

具有错误的python scipy稀疏矩阵SVD ARPACK错误3:在隐式重启的Arnoldi迭代的循环期间不能应用任何移位

我正在使用scipy在一些大数据上做稀疏矩阵svd.matix大小约为200,000*8,000,000,非零条目为1.19%.我使用的机器有160G内存,所以我想内存应该不是问题.

所以这里是我使用的一些代码:

from scipy import *
from scipy.sparse import *
import scipy.sparse.linalg as slin
from numpy import *
K=1500
coom=coo_matrix((value,(row,col)),shape=(M,N))
coom=coom.astype('float32')
u,s,v=slin.svds(coom,K,ncv=8*K)
Run Code Online (Sandbox Code Playgroud)

错误消息如下:

Traceback (most recent call last):
  File "sparse_svd.py", line 35, in <module>
    u,s,v=slin.svds(coom,K,ncv=2*K+1)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 731, in svds
    eigvals, eigvec = eigensolver(XH_X, k=k, tol=tol**2)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 680, in eigsh
    params.iterate()
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 278, in iterate
    raise ArpackError(self.info)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackError: ARPACK error 3: No shifts could be applied during a cycle of the Implicitly restarted Arnoldi iteration. …
Run Code Online (Sandbox Code Playgroud)

python scipy sparse-matrix svd arpack

5
推荐指数
0
解决办法
1298
查看次数

python scipy eigs:无论收敛容差如何,在最大迭代次数后返回特征向量

我想获得稀疏对称矩阵的特征向量,在给定时间内具有最佳精度。
目前我使用以下内容scipy.sparse.eigsh

evals, evecs = eigsh(MyMatrix, 2,which='LM' ,tol=1.e-15, maxiter=1000000)
Run Code Online (Sandbox Code Playgroud)

如果它没有tol通过迭代收敛到精度maxiter,则会产生一个ArpackNoConvergence错误,其中包含已收敛的特征向量/值,但不包含未收敛的特征向量/值。然而,我更喜欢拥有精确的向量,1.e-141.e-15不是根本没有向量。有没有办法强制返回尚未收敛的特征向量(也许使用另一个库)?
就像在 Matlab 中一样,eigs函数无论如何都会返回特征向量,如果未达到所需的精度,则只会发出额外的警告。

谢谢 !

python scipy sparse-matrix eigenvector arpack

5
推荐指数
1
解决办法
1872
查看次数