что не так с импортом модулей в scipy, это ошибка? - PullRequest
5 голосов
/ 04 января 2012

хорошо, я не думаю, что могу объяснить эту проблему словами, вот фрагмент сеанса ipython, куда я импортирую scipy, чтобы построить разреженную матрицу.

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>

что там происходит, почему нельзя создать разреженную матрицу, используя sp, в первый раз, когда я импортирую разреженный подмодуль особым образом (как во фрагменте), теперь можно использовать переменные sp и spar для создания разреженногоматрицы. (я полагаю, это просто ссылки на один и тот же объект)

Я воспроизвел эту оболочку Python по умолчанию (так что она не зависит от ipython)

что происходит?если так любезно, уточните.или это баг ??

Моя система - Fedora 16, KDE-научная, 64-битная.

1 Ответ

9 голосов
/ 04 января 2012

Это артефакт импорта Python, а не SciPy.Do

from scipy import sparse [as sp]

или

import scipy.sparse [as sp]

(где [] - мета-нотация для опциональности).

Короче говоря, оператор import должен знать«истинное» имя модуля, а не какое-то сокращение, созданное оператором import as.

...