7

我有一个大(~25000 x 1000)矩阵要分解。我基于 numpy 编写了自己的代码,但它效率低下并且不断抛出内存错误。

我一直在尝试安装和使用 nimfa ( http://nimfa.biolab.si/ ),并且安装过程(尝试过 easy_install、pip 以及下载和运行 git)没有显示任何错误。但是当我尝试使用它调用它时import nimfa,出现以下错误。我检查了 nimfa 先决条件,除了 numpy 和 scipy 之外,它没有提及任何内容。

我在 Windows 8 上,并使用安装了 numpy 和 scipy 的 Python 2.7.5。我也尝试过安装(并随后卸载)minGW 并执行此操作。

有任何想法吗?

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import nimfa
  File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\__init__.py", line 18, in    <module>
    from mf_run import *
  File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\mf_run.py", line 26, in <module>
    from utils import *
  File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\utils\__init__.py", line 8, in <module>
    import linalg
  File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\utils\linalg.py", line 15, in <module>
    import scipy.sparse.linalg as sla
  File "C:\Python27\lib\site-packages\scipy\sparse\linalg\__init__.py", line 100, in <module>
    from .isolve import *
  File "C:\Python27\lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, in <module>
    from .iterative import *
  File "C:\Python27\lib\site-packages\scipy\sparse\linalg\isolve\iterative.py", line 7, in <module>
    from . import _iterative
ImportError: DLL load failed: The specified module could not be found.`
4

1 回答 1

0

如果您的目的是分解矩阵而不是用来nimfa做它,我建议使用它dask。Dask 旨在使对适合磁盘但不在内存中的数据对象的操作能够以最小的代码更改完成。一个工作示例:

import dask.array as da
import numpy as np
import dask

mtx = da.from_array(np.random.normal(size=(25000, 1000)), chunks=(250, 20))

q, r = np.linalg.qr(mtx)

您可能需要调整chunks参数以适合您的计算资源(请参阅常见问题解答以获取有关建议)。

于 2017-05-31T23:02:06.403 回答