我在.hdf5文件中存储了一个巨大的数据集,试图将其拆分为多个组。 .hdf5文件包含一个形状为(2 555 904 x 1024 x 2)
的数组
我的代码的一个小例子如下:
import pickle
import h5py
import numpy as np
f = h5py.File('RML_2018.hdf5', 'r')
# Assembling M-PSK dataset
PSK_32 = f['X'][0:106496]
PSK_OQ = f['X'][638976:745472]
PSK_2 = f['X'][851968:958464]
PSK_8 = f['X'][958464:1064960]
PSK_16 = f['X'][1277952:1384448]
PSK_Q = f['X'][2023424:2129920]
M_PSK = np.concatenate([PSK_32, PSK_OQ, PSK_2, PSK_8, PSK_16, PSK_Q])
print('shape of M_PSK array :',M_PSK.shape)
del PSK_32
del PSK_OQ
del PSK_2
del PSK_8
del PSK_16
del PSK_Q
with open('Data/M_PSK.pkl', 'wb') as f:
pickle.dump(M_PSK, f, protocol=4)
# Assembling M-APSK dataset
APSK_16 = f['X'][106496:212992]
APSK_32 = f['X'][532480:638976]
APSK_64 = f['X'][1384448:1490944]
APSK_128= f['X'][1597440:1703936]
M_APSK = np.concatenate([APSK_16, APSK_32, APSK_64, APSK_128])
print('shape of M_APSK array :',M_APSK.shape)
del APSK_16
del APSK_32
del APSK_64
del APSK_128
with open('Data/M_APSK.pkl', 'wb') as f:
pickle.dump(M_APSK, f, protocol=4)
如您所见,我正在读取原始数据集的块,将它们连接起来,然后删除以节省内存,最后将连接的数组转储到.pkl文件中
第一部分还可以。但随后出现以下错误:
Traceback (most recent call last):
File "/home/nechi/PycharmProjects/CNN_MR_v2/cnn.py", line 28, in <module>
APSK_16 = f['X'][106496:212992]
TypeError: '_io.BufferedWriter' object is not subscriptable
有人可以告诉我这是什么错误消息,我明白了吗? 以及如何解决?
谢谢
答案 0 :(得分:0)
我的问题的答案是,我打开了具有相同名称f
的.hdf文件和.pkl文件
f = h5py.File('RML_2018.hdf5', 'r')
和
with open('Data/M_PSK.pkl', 'wb') as f:
pickle.dump(M_PSK, f, protocol=4)
这造成了混乱,所以我不得不为文件选择不同的名称,并且它可以工作。