【问题标题】:why cannot I use sp.signal by import scipy as sp? [duplicate]为什么我不能通过 import scipy as sp 来使用 sp.signal? [复制]
【发布时间】:2015-10-27 22:27:11
【问题描述】:

我想使用scipy.signal.ltiscipy.signal.impulse 函数来计算传递函数。我通过以下方式导入scipy模块。

import scipy as sp
import numpy as np
import matplotlib.pyplot as plt
from math import *

但是,当我键入以下脚本时,

tf = sp.signal.lti(numH, denH)

内核报错:

---> 10 tf = sp.signal.lti(numH, denH)
AttributeError: 'module' object has no attribute 'signal' 

我尝试了另一种方式来导入信号模块,

from scipy.signal import lti, step, impulse

然后,脚本就可以工作了,

tf = lti(numH, denH)

所以,我的问题是,我们必须导入脚本中的每个子包吗?那么导入scipy包有什么意义呢?

谢谢。

【问题讨论】:

标签: python scipy enthought


【解决方案1】:

来自scipy 文档:

使用这些子包中的任何一个都需要显式导入。例如, import scipy.cluster.

from scipy import cluster

做一个简单的事情没有多大意义

import scipy

查看site-packages/scipy/__init__.py 文件了解更多详情。将其与numpy init 进行比较。

numpy 是集成包,scipy 是松散集成包的集合。 numpy 是每个人都使用的基本数字包。 scipy 子包是相对独立的。我可以在不了解 signalintegrate 包的情况下加载和使用 sparse

【讨论】:

    【解决方案2】:

    在 python 包中导入模块的默认行为在包目录中的 __init__.py 文件中定义。您可以locate scipy 目录或使用ipythonimport scipy 找到此目录并使用问号调用scipy? 以获取路径。默认情况下,scipy 似乎只导入 numpy。信号模块是一个脚本目录,其中包含自己的__init__.py,因此您需要scipy.signal.lti 语法。

    您可以按照question 中的说明编辑__init__.py,这将减少样板导入,但可能不建议这样做,因为它会产生不可移植的代码并且可能导致名称冲突。

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 2020-07-31
      • 2015-09-14
      • 1970-01-01
      • 2019-06-07
      • 2019-07-30
      • 2018-11-07
      • 2017-07-03
      相关资源
      最近更新 更多