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