PDA

View Full Version : [Python] importare funzione da modulo Scipy


Devil!
04-11-2009, 09:23
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 :)

vhost87
04-11-2009, 09:29
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 ;)

Devil!
04-11-2009, 09:41
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:

flx2000
04-11-2009, 11:40
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.

ndakota
04-11-2009, 12:58
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

Devil!
05-11-2009, 01:54
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)