numpy重塑渠道和试验中的EEG数据

时间:2019-07-04 05:43:47

标签: python numpy

我正在研究脑电图数据集。使用16个电极测量数据集。每个受试者数据具有形状为122880个数据点的阵列。通道1测量7680个数据点,通道2测量7680个数据点,直到16个通道都保持不变。
7680 * 16 = 122800

我已使用

重塑了数据
np.reshape(data,(7680,16).

现在,我希望每个通道的每个7680个数据点进一步分成256个数据点。 所以我正在使用

np.reshape(data,(256,-1,16)

让我知道这是正确的方法。其实我想要通道1中的0-7680元素,而不是通道2中的7680-7680 * 2,依此类推。
现在,如果我仅选择一个频道,它会获得7680点,我希望将这些7680点重塑为30个试验,例如每个试验具有256个元素

1 个答案:

答案 0 :(得分:1)

我错了。当您将尺寸标注为(256,-1,16)时,numpy将为您进行除法并将-1替换为30。请注意,这仅可能发生在负整数(我用-1-2-3测试过)。所以

np.reshape(data,(256,-1,16))

将返回一个大小为256 x 30 x 16的数组,是的,它已经完成。


编辑: 如您所说:

  

最初的7680个样本代表第一个通道,然后代表7680个第二个通道,等等。

重塑的正确方法是

np.reshape(data, (16, 7680))

然后,您要将这7680个样本划分为30个试验,每个通道包含256个样本。很简单:

np.reshape(data, (16, 30, 256))
# or just simply
np.reshape(data, (16, -1, 256)) # as numpy will do division for you

如果您随后想要将256个样本划分为样本集群,请执行以下操作:

np.reshape(data, (16, 30, number_of_clusters, size_of_each_cluster))

切记始终从外到内,先放置簇数,然后放置簇的大小。


EDIT2:您说过要一组30个试验,每个试验包含一个2D数组,该数组具有16列(作为16个电极)和256行(作为256个点,在2秒内)。

代码如下:

temp = np.reshape(data, (7680,16), order='F')
output = temp.reshape((30,256,16))

使用1行代码:

data.reshape((7680,16), order='F').reshape((30,256,16))

说明:在python改变数组的形状之前,它首先将其展平(如果还没有)。然后将每个元素一个接一个地放置到新数组中。

默认为order='C',这意味着它将从上到下逐行放置元素(与我们的读写方式相同)。 order='F'表示它将从左到右逐列放置元素。

您的数据首先来自通道1的7680点。这就是为什么我使用order='F'