【问题标题】:Python Numpy CAR implementation - ValueError: shapes not alignedPython Numpy CAR 实现 - ValueError:形状未对齐
【发布时间】:2022-02-05 08:51:35
【问题描述】:

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

Bnd 它返回此错误:

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

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

【问题讨论】:

    标签: python numpy signal-processing


    【解决方案1】:

    哎呀 - 我不明白共同平均参考的定义。正如Warren Weckesser'scomment 中所指出的,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
    

    【讨论】:

    • 这太棒了!非常感谢!
    • 这是试验的平均值。对于 CAR,您不应该对 渠道 进行平均吗?如果是这样,您可以使用car = np.mean(trials, axis=2, keepdims=True),然后进行减法tnew = trials - car
    猜你喜欢
    • 2016-05-04
    • 2022-12-07
    • 1970-01-01
    • 2019-09-25
    • 2019-06-03
    • 2018-03-06
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多