Python Numpy CAR implementation - ValueError: shapes not aligned

Python Numpy CAR implementation - ValueError: shapes not aligned

我正在尝试在 python 中实现通用平均参考函数。这个想法是计算所有 EEG 通道的信号平均值,并从每个时间点的每个通道的 EEG 信号中减去它。 此函数的输入是一个名为 trials 的 NumPy 数组。 Trials 是一个 3D 数组,包含以下形式的 EEG 数据:(试验 x 时间 x 通道)。 例如:

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

发现returns这个错误:

ValueError: shapes (2048,) and (0,17) not aligned: 2048 (dim 0) != 0 (dim 0)

你对如何解决这个问题有什么建议吗? 提前致谢!

哎呀 - 我不明白共同平均参考的定义。正如 Warren Weckesser's 中指出的那样,CAR 是每个电极的值,而不是随时间变化的值。所以应该在通道维度上计算平均值。使用 keepdims=True 使形状兼容,以便减法仍然可以通过广播完成:

>>> car = np.mean(trials, axis=2, keepdims=True)
>>> car.shape
(240, 2048, 1)

您可以利用 NumPy 的 broadcasting

>>> 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