gpt4 book ai didi

python - 矢量化 `signal.lfilter`

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:29 24 4
gpt4 key购买 nike

我正在尝试将lfilter应用于一维数组的集合,即在其行对应于不同信号的二维数组上。这是代码:

import numpy as np
from scipy import signal
from scipy import stats

sysdim=2 #dimension of filter, i.e. the amount that it depends on the past
ksim=100 #number of different singals to be filtered
x_size=10000
# A and C are
A=np.random.randn(sysdim*ksim).reshape((ksim,sysdim))
B=np.random.randn(sysdim*ksim).reshape((ksim,sysdim))
C=2.0*np.random.randn(sysdim*ksim).reshape((ksim,sysdim))
D=2.0*np.random.randn(sysdim*ksim).reshape((ksim,sysdim))
print A.shape,np.random.randn(x_size*ksim).reshape((ksim,x_size)).shape
x=signal.lfilter(A,np.hstack((np.ones((ksim,1)),C)),np.random.randn(x_size*ksim).reshape((ksim,x_size)),axis=1)
y=signal.lfilter(B,np.hstack((np.ones((ksim,1)),D)),x,axis=1)

我收到以下错误:

ValueError: object too deep for desired array 

有人可以指导我吗?

最佳答案

因此,您会在 x=... 行上收到错误

参数的形状为分子:(100,2)、分母:(100,3) 和数据:(100,10000)。您遇到的问题是 lfilter 期望对其处理的所有项目使用相同的过滤器,即它只接受分子和分母的一维向量。

看来您确实需要将其变成沿行的循环。像这样的事情:

# denom_array: R different denominators in an array with R rows
# numer_array: R different numerators in an array with R rows
# data: R data vectors in an array with R rows
# out_sig: output signal
out_sig = array([ scipy.signal.lfilter(denom_array[n], numer_array[n], data[n]) for n in range(data.shape[0])] )

参见http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lfilter.html了解有关举重者期望的更多信息。

(但不用担心,性能影响很小,无论如何,大部分时间都花在过滤上。)

关于python - 矢量化 `signal.lfilter`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com