Python Numpy CAR实现-ValueError:形状未对齐



我正在尝试在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

最新更新