问题标签 [arpack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-spark - 如何为 Spark 2.2.0 正确设置本机 ARPACK
我在运行 PySpark 作业时收到以下警告:
2006 年 17 月 10 日 18:27:16 警告 ARPACK:无法从以下位置加载实现:com.github.fommil.netlib.NativeSystemARPACK
2006 年 17 月 10 日 18:27:16 警告 ARPACK:无法从以下位置加载实现:com.github.fommil.netlib.NativeRefARPACK
我的代码是
我正在使用 Ubuntu 16.04 EC2 实例。我已将以下所有库安装到我的系统中。
我已将 LD_LIBRARY_PATH 调整为指向共享库路径,如下所示。
现在,当我列出 $LD_LIBRARY_PATH 目录时,它向我显示了以下.so文件
但我仍然无法使用本机 ARPACK 实现。另外我正在缓存传递给矩阵的 RDD 但它仍然抛出缓存警告任何建议如何解决这 3 个警告?
我已经从 spark 下载页面下载了 spark-2.2.0 的编译版本。
fortran - 尝试构建 ARPACK,但许多源文件没有被编译
首先让我说我不是超级用户,在这里有点菜鸟,但我对我在做什么有一个基本的了解。
我已经按照此处的说明安装了 MSYS2 和 MinGW-w64 。我正在使用 64 位 Windows 10,我想最终在我的 Fortran 90 代码中使用ARPACK库。我目前正在使用 Microsoft Visual Studio 2017 和 Intel Fortran ifort 编译器和 MKL 库。所以,
1.我应该用gfortran
or编译 ARPACK 还是ifort
没关系?
附录:编译ifort
似乎让人头疼,特别是因为ARmake.inc
文件中引用的命令是 unix 命令,所以我需要用我不太熟悉的 Windows 等效命令替换它们(例如ln -s
-> mklink
)
我已将 ARPACK 源文件提取到/c/ARPACK
,并更新了ARmake.inc
文件,更改了以下内容:
我也进入/UTIL/second.f
文件并删除了该行EXTERNAL ETIME()
。
2.我应该设置PLAT = x86_64
吗?我不明白究竟是如何make
工作的,所以我不知道这个设置到底会影响什么。我make
在mingw64
shell 中运行(从/msys64
文件夹运行)。
接下来,我运行make lib
. 我收到了许多警告,特别是在编译时snrm2.f
,dnrm2.f
我收到了同样的错误:
3.这些警告重要吗?我对 Fortran 77 的了解非常少,而且我并没有努力去理解它们。
此外,每次它进入一个新文件夹时,我都会得到(例如)
ARmake.inc
文件在哪里
4.这个警告/错误信息重要吗?我的理解是这应该打印例如
但make
不喜欢这里有两个命令,并且用第二个覆盖第一个。
最后总结一下,在我继续之前,我注意到并非每个源.f
文件都已编译。例如,在 中/BLAS
,我有cgemm.f
、ctbsv.f
、ctrsm.f
、dgemm.f
和其他一些没有关联文件的.o
文件。为什么这些被遗漏了?例如,我知道这dgemm
是一个非常基本的矩阵乘法例程,我认为这是必不可少的,所以我假设沿线某处出现错误,但在此make
过程中我从未看到任何错误消息。任何和所有的帮助表示赞赏,经过许多小时的尝试让它发挥作用,我觉得结局(希望)就在眼前。所以我最后也是最重要的问题
5.为什么有些源文件没有编译,这是否会导致生成的库无法使用?如果是这样,我可以做些什么不同的事情,或者我需要做什么来完成图书馆的建设?
我意识到个人Makefile
提到 ARPACK 不需要这些文件,但 ARPACK 示例需要这些文件。它们可以通过使用来包含,make all
而不是make lib
.
python - 张量流中大型稀疏矩阵的特征向量
我想知道是否有一种方法可以计算张量流中非常大的稀疏矩阵的前几个特征向量,希望它可能比 scipy 的 ARPACK 实现更快,它似乎不支持并行计算。至少,据我所知。
fortran - 具有 16 字节整数索引的 ARPACK 特征值
我的代码可以很好地计算我的测试用例中的特征值,用于 ARPACK 无耻地从这里获取并适应快速 4x4 矩阵。(为简洁起见,在我的示例代码中删除了顶部的注释)。
好吧,我的问题。我有非常大的矩阵,或者至少,我会解决我的实际问题。但是,当我将整数类型设为 16 时,ARPACK 会出错。有没有一种简单的方法来转换 ARPACK 函数以允许我对事物进行 16 字节索引?或者,是否有可能改变它使图书馆允许这样做的方式?我用 gfortran 制作了这个库。
任何见解将不胜感激。
请注意:下面的代码已经过编辑(实际运行正常)。我还添加了 2 个可能对开始使用 ARPACK 的人有用的子程序。请原谅错误打印语句的格式更改。
python - 使用 scipy.sparse.linalg.eigsh 时内存使用量无限增长
这是代码:
据我所知,这里没有太多可以搞砸的地方,但我观察到的是我的机器最初有足够的内存(90G 包括交换),但是 eigsh 的内存使用量在运行直到我的内存用完。我在这里有什么明显的遗漏吗?
我试过的:
——看源头。这是很多,但据我所见,python 代码在迭代之间没有分配内存。我不擅长 Fortran,但如果 ARPACK 本身或调用例程分配内存,那将是出乎意料的。
--在 Octave(MATLAB 克隆)中尝试了一个等效的东西,具有类似的效果,虽然不太明显,因为数据类型必须是双精度的,因此从一开始就受到更多的限制。那么也许它可能与 ARPACK 本身有关?
——谷歌了一大堆。看起来 Scipy 确实(是吗?)在某处使用了循环引用,这在多次调用 eigsh 时引起了其他人的悲痛,但我只调用了一次,所以也许这不是同一个问题。
任何帮助将不胜感激。
numpy - 应用 scipy.sparse.linalg.svds 返回 nan 值
我开始使用 scipy.sparse 库,当我尝试应用 scipy.sparse.linalg.svds 时,如果奇异值为零,我会收到错误消息。
我这样做是因为最后我将使用非常大且非常稀疏的矩阵,其中只有 {+1, -1} 的条目不是正方形(>1100*1000 大小,稀疏度 >0.99),我想知道他们的等级。我大概知道等级是多少,它几乎是满的,所以只知道最后的奇异值可以告诉我等级到底是什么。
这就是我选择使用scipy.sparse.linalg.svds
和设置的原因which='LM'
。如果排名不满,就会有零的奇异值,这是我的代码:
输出是
/usr/lib/python3/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py:1849: RuntimeWarning: invalid value encountered in sqrt
s = np.sqrt(eigvals)
关于为什么会发生这种情况的任何想法?也许还有另一种知道秩的有效方法,知道我有一个几乎满秩的大型非方形非常稀疏矩阵?
scipy 1.1.0 版 numpy 1.14.5 版 Linux 平台
提前致谢
c++ - 使用 apt-get 存储库中的 arpack 工具:未定义的引用,分段错误
我使用“sudo apt install libarpack2-dev”安装了 Arpack。
下一个库位于 /usr/lib 中:
我想从名为 ising.cpp 的 cpp 文件中调用此库中的 dsaupd 子例程。
运行“make --debug”时出现错误
我在从 fortran 库中调用子例程方面经验不足,无法弄清楚问题出在哪里。
需要哪些修改:
- 解决未定义的引用错误
- 成功调用子程序
编辑:第一部分似乎通过将 l 标志放在 cpp 文件之后来解决。这会将 g++ 命令更改为
这与这个问题有关。
在能够编译代码之后,我仍然难以调用子例程。运行程序时出现“17713 Segmentation fault (core dumped)”
似乎这个问题与这个问题有关,它基本上归结为按值传递(C++)VS按引用传递(fortran)的不匹配。
make 命令的完整输出(包括实际的 g++ 调用)是 (was)
我要调用的 arpack 例程是这个例程:
我要从中调用例程的 cpp 文件是 ising.cpp。这是一个避免上述分段错误的版本。
对于stackoverflow:请允许提交问题。您正确识别代码块的工具不起作用,并导致拒绝有用的问题并破坏问题的布局。
python - Python中的SVD内存错误
我想在一个大数组上执行 SVD M[159459,159459]
。
由于 SVD 计算依赖于 shape 的输入矩阵(159459,159459)
,因此这里没有解决我的目标。
我曾尝试使用:
scipy.linalg.svd
scipy.linalg.svd(check_finite=False)
- 将驱动程序更改为
lapack_driver='gesvd
numpy.linalg.svd
但是,我总是得到一个 MemoryError。最后,我想计算完整的 SVD,因为我想执行Procrustes分析,即如果M是我现在拥有的矩阵,我需要M = USV'
一切都失败了。
我的系统详情:
$ cat /proc/meminfo
MemTotal: 527842404 kB
MemFree: 523406068 kB
MemAvailable: 521659112 kB
python - _arpack 的 DLL 加载失败
无法完全解决此错误。请任何线索。
python - 大型稀疏矩阵的所有特征向量都为零
我有一个 50,000 x 50,000 或更大的密集矩阵。如果我使用 numpy 或 scipy- 包,我所有的特征向量的条目都是 0。如果我使用 scipy.sparse 只计算 1000-8000 个特征向量,我会得到正确的特征向量。但我需要所有这些。
这可能是内存问题吗?或者这个问题的原因是什么? 我可以使用 LAPACK 或 ARPACK 来计算正确的特征向量吗?
请注意,我的矩阵是 networkx 图的表示,因此是稀疏矩阵。我将它们转换为密集矩阵以供使用numpy.linalg
,否则我使用scipy.sparse.linalg
.