sosfilt
数组时,来自
scipy=1.9.3
库的
numpy=1.23.4
给了我一个奇怪的 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, 信号, 轴=0) 回溯(最近一次调用最后一次):
单元格输入[102],第 1 行 signalFiltered = sosfilt(sos, 信号, 轴=0)
sosfilt 中的文件 C:\ProgramData\Miniconda3 nvs\devenv\lib\site-packages\scipy\signal_signaltools.py:4247 _sosfilt(sos, x, zi)
文件 _sosfilt.pyx:81 在 scipy.signal._sosfilt._sosfilt
View.MemoryView.memoryview_cwrapper 中的文件字符串源:660
文件字符串源:View.MemoryView.memoryview中的350。cinit
ValueError:ndarray 不是 C 连续的
但是
signal.flags
表演
C_CONTIGUOUS:正确
F_CONTIGUOUS:正确
自己的数据:真实
可写:正确
对齐:正确
回写复制:错误
我也在从 wav 文件导入的其他信号上尝试过此操作,但出现相同的错误。环顾四周,似乎没有任何已知问题或使用此函数的其他错误示例(尽管讨论了一些机器学习包错误其他地方)
Scipy 有什么问题?
是转置带来了问题,使其变得
F contiguous
。添加一个.copy()
。
查看转置和复制之前和之后的数组标志。