Scipy sosfilt ValueError ndarray 不是 C 连续的

问题描述 投票:0回答:1
输入

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 有什么问题?

numpy filter scipy signal-processing numpy-ndarray
1个回答
0
投票

是转置带来了问题,使其变得

F contiguous
。添加一个
.copy()

查看转置和复制之前和之后的数组标志。

© www.soinside.com 2019 - 2024. All rights reserved.