2012-01-04 5 views
5

ok, non penso, posso spiegare questo problema in parole così, ecco il frammento di sessione ipython, dove importare scipy, per costruire una matrice sparsa.cosa c'è di sbagliato nell'importazione di moduli in scipy, è un bug?

In [1]: import scipy as sp 

In [2]: a = sp.sparse.lil_matrix((5,5)) 
     --------------------------------------------------------------------------- 
     AttributeError       Traceback (most recent call last) 
     /home/liveuser/<ipython-input-2-b5a55fc2d0ac> in <module>() 
     ----> 1 a = sp.sparse.lil_matrix((5,5)) 

     AttributeError: 'module' object has no attribute 'sparse' 

In [3]: import scipy.sparse as spar 

In [4]: ax = spar.lil_matrix((5,5)) 

In [5]: a = sp.sparse.lil_matrix((5,5)) # you are kidding me? 

In [6]: a 
Out[6]: 
     <5x5 sparse matrix of type '<type 'numpy.float64'>' 
     with 0 stored elements in LInked List format> 

In [7]: ax 
Out[7]: 
     <5x5 sparse matrix of type '<type 'numpy.float64'>' 
     with 0 stored elements in LInked List format> 

ciò che accade lì, perché non si può costruire una matrice sparsa utilizzando sp, dentro la prima volta, quando importo sparse sottomodulo in modo particolare (come nel frammento), entrambe le variabili sp e longarone ora può essere usato per costruire matrici sparse. (credo che sono solo riferimenti a allo stesso oggetto)

ho riprodotto questa shell python di default, (quindi non è ipython specifico)

quello che sta succedendo, è da design?? se così gentilmente elaborato. o è un bug??

Il mio sistema è Fedora 16 KDE-scientifico, 64 bit.

risposta

9

Questo è un artefatto dell'importazione di Python, non di SciPy. Fare

from scipy import sparse [as sp] 

o

import scipy.sparse [as sp] 

(dove [] è meta-notazione per opzionalità).

In breve, l'istruzione import deve conoscere il nome "vero" del modulo, non un'abbreviazione creata da un'istruzione import as.

+1

No, sto importando scipy totale come sp, spero che sia chiaro dallo snippet di codice. intendi quando importare scipy come sp, il sotto-modulo sparse non viene importato in quanto è opzionale ?? – fedvasu

+0

@fedvasu: 'sparse' non viene importato quando si" importa scipy', indipendentemente da come lo si importa. È necessario importarlo in modo esplicito e utilizzare il suo nome completo. –

+0

perchè così ?? , potresti chiarire questo punto qui http://chat.stackoverflow.com/rooms/6384/quickscipy-talk – fedvasu