我正在尝试在python中实现一个Common Average Reference函数。其思想是计算所有EEG通道的信号平均值,并将其从每个时间点的每个通道的EEG信号中减去。这个函数的输入是一个名为trials的NumPy数组。Trials是一个3D阵列,包含以下形式的EEG数据:(Trials x time x channel(。例如:
trials.shape is (240, 2048, 17)
输出将是经过处理的信号阵列。这是我当前的代码:
# Common Average Reference
import numpy as np
def car(trials):
signal = []
for tr in trials:
tr = np.subtract(tr,(np.dot(np.mean(tr, axis=1), np.ones((0, np.size(tr, axis=1))))))
signal.append(tr)
return signal
然后返回此错误:
ValueError: shapes (2048,) and (0,17) not aligned: 2048 (dim 0) != 0 (dim 0)
你对如何解决这个问题有什么建议吗?提前谢谢!
WHOOPS-我不理解共同平均参考的定义。正如Warren Weckesser的评论中所指出的,CAR是每个电极的值,而不是随着时间的推移。因此,应该在通道维度上计算平均值。使用keepdims=True
使形状兼容,以便减法仍然可以通过广播完成:
>>> car = np.mean(trials, axis=2, keepdims=True)
>>> car.shape
(240, 2048, 1)
你可以利用NumPy的广播
>>> import numpy as np
>>> trials = np.random.random((240, 2048, 17))
(WRONG) >>> car = np.mean(trials, axis=0) # calculate the Common Average Reference across all the trials for each channel
>>> car.shape
(2048, 17)
>>> tnew = trials - car