无法从 'scipy.signal.signaltools' 导入名称“_centered”
Cannot import name '_centered' from 'scipy.signal.signaltools'
无法从 scipy 模块导入函数。
给出错误:
from scipy.signal.signaltools import _centered
Cannot import name '_centered' from 'scipy.signal.signaltools'
scipy.__version__
1.8.0
我在使用 statsmodels~=0.12.x
时遇到了同样的问题。将 statsmodels 包增加到版本 0.13.2
,此导入问题已解决。
更新更多注释:
- 之前:
- 安装依赖于
scipy
的固定版本statsmodels==0.12.2
- 有新 released
scipy==1.8.0
- 2022-02-05
- 安装的时候出现了这个问题:
from statsmodels.tsa.seasonal import seasonal_decompose
File "/usr/local/lib/python3.8/site-packages/statsmodels/tsa/seasonal.py", line 12, in <module>
from statsmodels.tsa.filters.filtertools import convolution_filter
File "/usr/local/lib/python3.8/site-packages/statsmodels/tsa/filters/filtertools.py", line 18, in <module>
from scipy.signal.signaltools import _centered as trim_centered
ImportError: cannot import name '_centered' from 'scipy.signal.signaltools' (/usr/local/lib/python3.8/site-packages/scipy/signal/signaltools.py)
之后:
- 当升级
statsmodels
到可用的最新版本 0.13.2
发布 2022-02-08 时,它有效
如果你使用的不是statsmodels
而是依赖于scipy
的其他包,请查看是否有可用的更新版本(在[=14发布后) =] 到 v.1.8.0
)
如果您需要将特定版本的 statsmodels 0.12.x 与 scipy 1.8.0 一起使用,我有以下 hack。
基本上它只是 re-publishes 现有的(但私有的)_centered 函数作为已经导入到 RAM 中的模块的 public 属性。
这是一种解决方法,如果您可以简单地将依赖项升级到最新版本。仅当您被迫使用那些特定版本时才使用它。
import scipy.signal.signaltools
def _centered(arr, newsize):
# Return the center newsize portion of the array.
newsize = np.asarray(newsize)
currsize = np.array(arr.shape)
startind = (currsize - newsize) // 2
endind = startind + newsize
myslice = [slice(startind[k], endind[k]) for k in range(len(endind))]
return arr[tuple(myslice)]
scipy.signal.signaltools._centered = _centered
在 scipy 1.8.0 中,已弃用的形式
from scipy.signal.signaltools import _centered
应该变成
from scipy.signal._signaltools import _centered
注意signaltools前面的下划线
如 AndrejHan and ThomasCokelaer 所述,您需要升级到 statsmodels-0.13.2
:
$ pip install statsmodels --upgrade
或
$ python3 -m pip install statsmodels --upgrade
您的错误应该会消失
无法从 scipy 模块导入函数。
给出错误:
from scipy.signal.signaltools import _centered
Cannot import name '_centered' from 'scipy.signal.signaltools'
scipy.__version__
1.8.0
我在使用 statsmodels~=0.12.x
时遇到了同样的问题。将 statsmodels 包增加到版本 0.13.2
,此导入问题已解决。
更新更多注释:
- 之前:
- 安装依赖于
scipy
的固定版本 - 有新 released
scipy==1.8.0
- 2022-02-05- 安装的时候出现了这个问题:
statsmodels==0.12.2
- 安装依赖于
from statsmodels.tsa.seasonal import seasonal_decompose
File "/usr/local/lib/python3.8/site-packages/statsmodels/tsa/seasonal.py", line 12, in <module>
from statsmodels.tsa.filters.filtertools import convolution_filter
File "/usr/local/lib/python3.8/site-packages/statsmodels/tsa/filters/filtertools.py", line 18, in <module>
from scipy.signal.signaltools import _centered as trim_centered
ImportError: cannot import name '_centered' from 'scipy.signal.signaltools' (/usr/local/lib/python3.8/site-packages/scipy/signal/signaltools.py)
之后:
- 当升级
statsmodels
到可用的最新版本0.13.2
发布 2022-02-08 时,它有效
- 当升级
如果你使用的不是
statsmodels
而是依赖于scipy
的其他包,请查看是否有可用的更新版本(在[=14发布后) =] 到 v.1.8.0
)
如果您需要将特定版本的 statsmodels 0.12.x 与 scipy 1.8.0 一起使用,我有以下 hack。 基本上它只是 re-publishes 现有的(但私有的)_centered 函数作为已经导入到 RAM 中的模块的 public 属性。
这是一种解决方法,如果您可以简单地将依赖项升级到最新版本。仅当您被迫使用那些特定版本时才使用它。
import scipy.signal.signaltools
def _centered(arr, newsize):
# Return the center newsize portion of the array.
newsize = np.asarray(newsize)
currsize = np.array(arr.shape)
startind = (currsize - newsize) // 2
endind = startind + newsize
myslice = [slice(startind[k], endind[k]) for k in range(len(endind))]
return arr[tuple(myslice)]
scipy.signal.signaltools._centered = _centered
在 scipy 1.8.0 中,已弃用的形式
from scipy.signal.signaltools import _centered
应该变成
from scipy.signal._signaltools import _centered
注意signaltools前面的下划线
如 AndrejHan and ThomasCokelaer 所述,您需要升级到 statsmodels-0.13.2
:
$ pip install statsmodels --upgrade
或
$ python3 -m pip install statsmodels --upgrade
您的错误应该会消失