【发布时间】:2021-04-03 05:41:02
【问题描述】:
我正在研究与信号处理相关的问题。我有一个超过 2000 个 EEG 信号的数据集。每个 EEG 信号由一个 2D Numpy 数组 (19 x 30000) 表示。阵列的每一行都是信号的通道之一。我要做的是在这些单独的通道(行)上找到频谱图并将它们垂直连接起来。这是我目前写的代码。
raw = np.load('class_1_ar/'+filename)
images = []
for i in range(19):
print(i,end=" ")
spec,freq,t,im = plt.specgram(raw[i],Fs=100,NFFT=100,noverlap=50)
plt.axis('off')
figure = plt.gcf()
figure.set_size_inches(12, 1)
figure.canvas.draw()
img = np.array(figure.canvas.buffer_rgba())
img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGRA)
b = figure.axes[0].get_window_extent()
img = np.array(figure.canvas.buffer_rgba())
img = img[int(b.y0):int(b.y1),int(b.x0):int(b.x1),:]
img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGRA)
images.append(img)
base = cv2.vconcat(images)
cv2.imwrite('class_1_sp/'+filename[:-4]+'.png',base)
c -= 1
print(c)
这是我的输出:
但是,该过程需要花费太多时间来处理。前 200 个样本的处理耗时近 8 小时。
我的问题是,我该怎么做才能让它更快?
【问题讨论】:
-
您是否分析了您的代码以查看哪个部分花费的时间最多?看起来你绘制了一个频谱图,然后从屏幕上抓取图像?这似乎是一种相当迂回的做事方式......
-
假设每个 EEG 的生成相互独立,您可以使用 Python 多处理并行化您的代码。此外,正如 Cris Luengo 所指出的,可能有一种更快的方法将数字存储到 Numpy 数组中。此外,请注意 matplotlib 通常很慢。可能有更快的软件包可以做到这一点(请看一下 scipy)。
-
谢谢。并行化它起作用了。现在速度更快了
标签: performance opencv image-processing optimization spectrogram