我試圖用h5py將數據存儲爲(圖像,角度)的元組列表。圖像是來自OpenCV的uint8類型的大小爲(240,320,3)的numpy數組,而角度只是float16類型的數字。H5PY/Numpy - 設置numpy數組的內部形狀(對於h5py)
使用h5py時,您需要有一個預定義的形狀以保持可用的讀/寫速度。 H5py會用任意值預裝整個數據集,您可以在其中稍後索引並將這些值設置爲任何您想要的值。
我想知道如何在初始化h5py數據集的形狀時設置內部numpy數組的形狀。我相信同樣的解決方案也適用於numpy。
import h5py
import numpy as np
dset_length = 100
# fake data of same shape
images = np.ones((dset_length,240,320,3), dtype='uint8') * 255
# fake data of same shape
angles = np.ones(dset_length, dtype='float16') * 90
f = h5py.File('dataset.h5', 'a')
dset = f.create_dataset('dset1', shape=(dset_length,2))
for i in range(dset_length):
# does not work since the shape of dset[0][0] is a number,
# and can't store an array datatype
dset[i] = np.array((images[i],angles[i]))
Recreateing在numpy的問題是這樣的:
import numpy as np
a = np.array([
[np.array([0,0]), 0],
[np.array([0,0]), 0],
[np.array([0,0]), 0]
])
a.shape # (3, 2)
b = np.empty((3,2))
b.shape # (3, 2)
a[0][0] = np.array([1,1])
b[0][0] = np.array([1,1]) # ValueError: setting an array element with a sequence.
'B = np.empty((3,2),D型細胞=對象)'將使其行爲類似於'A'。但是,這不是你想要的行爲。 – Eric