View Full Version : [Python] importare funzione da modulo Scipy
Ciao, sono alle prime armi con python.
Come faccio a importare e usare le funzioni csrtodense (http://www.scipy.org/doc/api_docs/SciPy.sparse.sparsetools.html#csrtodense) e densetocsr (http://www.scipy.org/doc/api_docs/SciPy.sparse.sparsetools.html#densetocsr) contenute in SciPy.sparse.sparsetools (http://www.scipy.org/doc/api_docs/SciPy.sparse.sparsetools.html)?
Per importare sparsetools uso
from scipy.sparse import sparsetools
Ma per usare le funzioni? Ho provato con:
scipy.sparse.sparsetools.densetocsr(M)
(M è una matrice), ma ottengo:
Traceback (most recent call last):
File "gcm.py", line 43, in <module>
scipy.sparse.sparsetools.densetocsr(M)
NameError: name 'scipy' is not defined
Grazie a chi mi darà una mano :)
Non conosco bene Python, non vorrei una stupidata quindi (deduco funzioni come Java e C# l'import...).
Ma non devi istanziare la classe prima di utilizzare i metodi? :D
Aspetto il parere cdimauro che ne sa sicuramente più di me ;)
Ad esempio, per usare la funzione coseno importo il modulo math con
import math
e poi scrivo
math.cos(x)
pensavo valesse lo stesso per csrtodense e densetocsr e quindi ho scritto per analogia.
Adesso invece mi sono accorto che se importo solamente la funzione coseno con
from math import cos
devo usare
cos(x)
Quindi, applicando al problema in questione, ho provato con
from scipy.sparse import sparsetools
e scritto:
sparsetools.densetocsr(M)
Ottengo:
Traceback (most recent call last):
File "gcm.py", line 43, in <module>
sparsetools.densetocsr(M)
AttributeError: 'module' object has no attribute 'densetocsr'
sto andando a caso :stordita:
Se usi il metodo from / import non devi premettere il nome della libreria.
Quindi per esempio se usi "import math" devi usare math.cos(), ma se fai "from math import cos" devi usare solo cos() senza il "math." davanti.
nel caso di math perchè penso siano metodi statici. Ma le classi normali immagino vadano istanziate e poi bisogna usare l'oggetto.
cdimauro
04-11-2009, 13:40
Ciao, sono alle prime armi con python.
Come faccio a importare e usare le funzioni csrtodense (http://www.scipy.org/doc/api_docs/SciPy.sparse.sparsetools.html#csrtodense) e densetocsr (http://www.scipy.org/doc/api_docs/SciPy.sparse.sparsetools.html#densetocsr) contenute in SciPy.sparse.sparsetools (http://www.scipy.org/doc/api_docs/SciPy.sparse.sparsetools.html)?
Per importare sparsetools uso
from scipy.sparse import sparsetools
Ma per usare le funzioni? Ho provato con:
scipy.sparse.sparsetools.densetocsr(M)
(M è una matrice), ma ottengo:
Grazie a chi mi darà una mano :)
Puoi provare o con:
import scipy
scipy.sparse.sparsetools.densetocsr(M)
oppure con:
from scipy.sparse.sparsetools import densetocsr
densetocsr(M)
Non so com'è realizzato il package scipy, ma una delle due dovrebbe funzionarti.
B|4KWH|T3
05-11-2009, 00:18
Ciao
questa (http://it.diveintopython.org/object_oriented_framework/importing_modules.html) per chiarirti le idee su come importare i moduli in python
comunque, come vedi dal messaggio di errore, quella funzione non c'è proprio nel modulo: in effetti neanche io me la ritrovo.
Credo sia dovuto ad un problema di documentazione: quella a cui ti riferisci è della 0.6 (risale al 2007), attualmente SciPy è nel ramo 0.7 e penso siano cambiate diverse cose.
Questa è la reference guide della versione attuale: http://docs.scipy.org/doc/scipy-0.7.x/reference/sparse.html
ma non è completa
Grazie per le risposte.
In effetti non mi trovavo con la documentazione a disposizione.
Per la cronaca ho comunque risolto, anche se per altra via: ho trovato la medesima funzione scritta in fortran, ho creato un modulo e l'ho interfacciato con f2py (http://www.scipy.org/F2py)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.