python - 过滤数据时出现内存错误
问题描述
我正在实现一个 filtfilt 过滤器,但我收到了 MemoryError。我尝试了两台不同的计算机,但错误仍然存在。
File "C:\Users\UserName\lib\site-packages\scipy\signal\signaltools.py", line 3129, in filtfilt
zi = lfilter_zi(b, a)
File "C:\Users\UserName\lib\site-packages\scipy\signal\signaltools.py", line 2689, in lfilter_zi
IminusA = np.eye(n - 1) - linalg.companion(a).T
File "C:\Users\UserName\lib\site-packages\numpy\lib\twodim_base.py", line 201, in eye
m = zeros((N, M), dtype=dtype, order=order)
MemoryError
任何线索如何解决这个问题?我的数据不是那么大(长度为 3011723 的一维数组)。我在 python win63 上使用 Pycharm。我将非常感谢您的帮助。
这是发生错误的示例代码:
from numpy import arange, random
from scipy.signal import kaiserord, firwin, filtfilt
fs = 1000
data = random.uniform(size=3011723)
nyq_rate = fs / 2.0
# The desired width of the transition from pass to stop, relative to the Nyquist rate
width = 0.1/nyq_rate
# The desired attenuation in the stop band, in dB.
ripple_db = 100.0
# Compute the order and Kaiser parameter for the FIR filter.
N, beta = kaiserord(ripple_db, width)
# Use firwin with a Kaiser window to create a lowpass FIR filter.
taps = firwin(N, 300/nyq_rate, window=('kaiser', beta), pass_zero=True)
# Use lfilter to filter x with the FIR filter.
filtered_data = filtfilt(taps, 1.0, data)
最好的,DTake
解决方案
scipy.signal.filtfilt
尝试计算伴随矩阵时会出现您的问题。对于中间计算,它会创建一个大小为 的数组,大小(3011723, 3011723)
约为72563 GB
。很明显,它装不下内存。
除了减少样本量,我没有看到任何其他选择。
推荐阅读
- javascript - 第 4 行的类型错误:回调不是函数 JavaScript 回调
- c# - 影响 Azure 应用服务 (ASP.NET WebApi) 中的并发性的限制因素是什么?
- c++ - 重载的小于运算符返回相反的布尔值
- python-3.x - 如何计算熊猫列中非空元素的数量?
- c++ - 在 C/C++ 中打开位于“/sys/”下的文件时出错
- spring-boot - SpringBootApplication 与 Spring Starter Web 错误
- node.js - 无法在 mongoDb 集合中保存数据:“ReferenceError:模型未定义”
- image - python图像显示
- swiftui - 在 SwiftUI 中返回泛型 View 类型的方法
- elasticsearch - ElasticSearch 查询字符串在嵌套对象中按范围搜索日期