在输入numpy=1.23.4
数组时,scipy=1.9.3
库中的sosfilt
给我一个奇怪的ValueError。
MWE:
import numpy as np
from scipy.signal import sosfilt
fs=48000
rng = np.random.default_rng()
signal = rng.normal(size=(fs))
b_0k = [1.01589602025559, 0.958943219304445, 0.961371976333197,
2.22580350360974, 0.471735128494163, 0.115267139824401,
0.988029297230954, 1.95223768730136]
b_1k = [-1.92529887777608, -1.80608801184949, -1.76363215433825,
-1.43465048479216, -0.366091796830044, 0.0, -1.91243380293387,
0.162319983017519]
b_2k = [0.922118060364679, 0.876438777856084, 0.821787991845146,
-0.498204282194628, 0.244144703885020, -0.115267139824401,
0.926131550180785, -0.667994113035186]
a_0k = np.ones(len(b_0k))
a_1k = [-1.92529887777608, -1.80608801184949, -1.76363215433825,
-1.43465048479216, -0.366091796830044, -1.79600256669201,
-1.91243380293387, 0.162319983017519]
a_2k = [0.938014080620272, 0.835381997160530, 0.783159968178343,
0.727599221415107, -0.284120167620817, 0.805837815618546,
0.914160847411739, 0.284243574266175]
sos = np.array([b_0k, b_1k, b_2k, a_0k, a_1k, a_2k]).T
signalFiltered = sosfilt(sos, signal, axis=0)
字符串
给我
signalFiltered = sosfilt(sos,signal,axis=0)回溯(最后一个最近的呼叫):
单元格输入[102],第1行信号已过滤= sosfilt(sos,信号,轴=0)
文件C:\程序数据\小图标3\环境变量\开发环境变量\库\站点包\脚本\信号_信号工具.py:sosfilt _sosfilt(sos,x,zi)中的4247
文件_sosfilt.pyx:81在scipy.signal._sosfilt._sosfilt中的位置
文件字符串源:660在视图.内存视图.内存视图_cwrapper中
文件字符串源:350在视图.内存视图.内存视图.cinit中
值错误:ndarray不是C连续的
然而
signal.flags
型
示出
C_CONTIGUOUS:真
F_CONTIGUOUS:真
所有者数据:真
可写:真
已对齐:正确
写入凭证副本:False
我也在从WAV文件导入的其他信号上尝试过这个方法,出现了同样的错误。环顾四周,似乎没有任何已知的问题或使用这个函数出现这种错误的其他示例(尽管有一些机器学习包bug讨论过elsewhere)
Scipy有什么问题?
1条答案
按热度按时间fhg3lkii1#
是转置产生了问题,使它成为
F contiguous
。添加.copy()
。看看数组标志,在转置和复制之前和之后。
transpose
通过颠倒步幅和形状来工作。这是一种view
,一种廉价的工作方式,但会扰乱连续性。