2013-07-24 10 views
7

Ho una matrice grande (~ 25000 x 1000) da scomporre. Ho scritto il mio codice basato su Numpy, ma è inefficiente e continua a generare un errore di memoria.Problemi nell'installazione di nimfa (libreria Python Matrix Factorization)

Ho cercato di installare e utilizzare nimfa (http://nimfa.biolab.si/) e il processo di installazione (provato easy_install, pip, e scaricando ed eseguendo git) non mostra alcun errore. Ma quando provo a chiamarlo usando import nimfa ottengo il seguente errore. Ho controllato i prerequisiti di nimfa e non menziona nulla oltre a numpy e scipy.

Sono su Windows 8 e utilizzo Python 2.7.5 con numpy e scipy installati. Ho anche provato a installare (e successivamente disinstallare) minGW e farlo.

Qualche idea?

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.` 
+2

Avete controllato se l'istruzione 'import scipy.sparse.linalg' nell'interprete Python dà lo stesso errore? – silvado

risposta

0

Se il vostro scopo è quello di fattorizzare la matrice piuttosto che utilizzare nimfa per farlo, vi suggerirei di usare dask invece. Dask è progettato per rendere possibile il completamento di operazioni su oggetti dati che si adattano al disco ma non in memoria con modifiche minime al codice. Un esempio di lavoro:

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) 

potrebbe essere necessario per regolare il parametro chunks in base alle proprie risorse di calcolo (si veda la FAQs per un consiglio su questo).