正如我在评论中所写,h5py保存的是数组,而不是列表。因此,在调用时,它会尝试将列表转换为数组:In [645]: alist
Out[645]:
[(1, array([[ 1., 1., 1., 1.]]), 64, 64),
(2, array([[ 1., 1., 1., 1.]]), 64, 64),
(3, array([[ 1., 1., 1., 1.]]), 64, 64),
(4, array([[ 1., 1., 1., 1.]]), 64, 64)]
In [646]: np.array(alist)
...
ValueError: setting an array element with a sequence.
这个步骤会产生错误。现在,如果我指定一个对象数据类型,我可以把它转换成一个数组,一个包含整数和数组的(4,4)数组。在
^{pr2}$
但是h5py不能保存这种数组。在
我可以从该列表中创建一个结构化数组:In [649]: np.array(alist, dtype='i,4i,i,i')
Out[649]:
array([(1, [1, 1, 1, 1], 64, 64), (2, [1, 1, 1, 1], 64, 64),
(3, [1, 1, 1, 1], 64, 64), (4, [1, 1, 1, 1], 64, 64)],
dtype=[('f0', '
这是因为它是元组的列表,是一个重要的细节。h5py可以保存:In [651]: arr = np.array(alist, dtype='i,4i,i,i')