在通道和试验中重塑脑电数据

2024-04-26 21:03:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究脑电图数据集。使用16个电极测量数据集。每个对象数据具有122880个数据点的形状数组。通道1测量7680个数据点,通道2测量7680个数据点,直到16个通道。
7680*16=122800

我已经用

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

现在我想把每个通道的7680个数据点进一步分成256个数据点。 所以我用

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

让我知道这是一个正确的方法。实际上,我希望在第一频道中使用0-7680元素,而不是在第二频道中使用7680-7680*2,以此类推。
现在如果我只看第一频道,它有7680个点,我想把这7680个点重塑成30个测试,比如每个测试有256个元素


Tags: 数据对象方法元素datanp数组电极
1条回答
网友
1楼 · 发布于 2024-04-26 21:03:52

我错了。当您将维度设置为(256,-1,16)时,numpy将为您进行除法,并将-1替换为30。注意,这可能只发生在负整数上(我用-1-2-3测试)。所以呢

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

将返回一个大小为256 x 30 x 16的数组,是的,完成了。你知道吗


编辑: 对于您的数据,如前所述:

First 7680 samples represent 1st channel, then 7680 - 2nd channel, ets.

正确的重塑方法是

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

要使用单行代码:

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

说明:在python重塑数组之前,它首先将其展平(如果还没有)。然后将每个元素逐个放入一个新数组。你知道吗

默认情况下,order='C',这意味着它将从上到下逐行放置元素(与我们的写入和读取方式相同)。而order='F'意味着它将从左到右逐列地放置元素。你知道吗

你的数据来自第一频道7680点。这就是我使用order='F'的原因。你知道吗

相关问题 更多 >