拆分numpy数组并重新排列它们

gdrx4gfi  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(134)

我有来自7个设备的10秒数据,每个设备在1D阵列中有2个通道,采样频率为51。2KHz。
我把数组分成10个
time_split = np.array_split(data, 10)
然后,我将time_split的每个元素拆分为每个设备的样本
device_split = [([np.array_split(d, 7) for d in time_split]
device_split.shape给出(10, 7, 51200)
因此,每秒7个通道中的每个通道都有51200个样本
好了,我现在有点想不明白了。我想为每个设备重建一个时间序列,例如,
对于设备0,我期望一个长度为10 x 51200的数组,即51处的10秒样本。2KHz的设备。
我试过了
devices = device_split[:][0]
devices.shape给出(7, 51200),因此devices[0]仅是来自设备0的1秒数据,而不是完整的10秒数据。
device_split[:][:]只返回原始数组
什么是有效的。..

dev_0 = []
dev_1 = []
dev_2 = []
dev_3 = []
dev_4 = [] 
dev_5 = []
dev_6 = []

for sec in device_split:
    
    dev_0.append(sec[0])
    dev_1.append(sec[1])
    dev_2.append(sec[2])
    dev_3.append(sec[3])
    dev_4.append(sec[4])
    dev_5.append(sec[5])
    dev_6.append(sec[6])
    
dev_0 = np.array(dev_0).flatten()
dev_1 = np.array(dev_1).flatten()
dev_2 = np.array(dev_2).flatten()
dev_3 = np.array(dev_3).flatten()
dev_4 = np.array(dev_4).flatten()
dev_5 = np.array(dev_5).flatten()
dev_6 = np.array(dev_6).flatten()

我突然想到,必须有一个更numpy的方式来做到这一点!
有吗?

kognpnkq

kognpnkq1#

如果device_split形状为(10,7,51200)并且第二个轴对应于设备。您可以使用以下命令获取第i个设备数据数组

device_split[:, i]

事实上

device_split[:]

返回原始数组。使用“:”意味着从轴获取所有索引。你也应该读numpy indexing doc
此外,如果您的数据是“flatten stack”,则可以重新调整数组的形状,而不是使用数组拆分

data.reshape(10, 7, -1)

其中“-1”与剩余尺寸(see reshape doc)相匹配。

相关问题