【问题标题】:h5py stores only 0s in datasetsh5py 在数据集中只存储 0
【发布时间】:2023-01-10 21:51:23
【问题描述】:

我试图将一些值存储在 h5py 文件中,但每次我尝试将矩阵存储在数据集中时,所有矩阵元素都被替换为 0。这是一个例子

我这样创建文件:

output_file=h5py.File('output_file', 'w')

dset=output_file.create_dataset('dset', (3,3))

for k in range(3):
    for l in range(3):
        dset[k][l]=1.

然后我读取文件并尝试打印输出

file=h5py.File('output_file', 'r')

print(file['dset'][:])

输出是

[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

所有的 1 都变成了 0。我究竟做错了什么?

【问题讨论】:

    标签: python h5py


    【解决方案1】:

    这是明确的covered in the manual。当您执行dset[k] 时,您创建了一个临时数组。这是您在执行 dset[k][l] = 1.0 时设置的此数组的第 l 元素。该临时数组不是您想要引用的 h5py 数据集——您根本没有触及后者。

    简而言之:用 dset[k, l] 代替索引。

    【讨论】:

      【解决方案2】:

      试试

      dset[k,l]=matrix[k][l]
      

      反而。

      【讨论】:

        【解决方案3】:

        我认为问题是关于数据类型 float32 与 float64 之类的事情.. 尝试这个:

        dset = output_file.create_dataset('dset', (3, 3), dtype='float32')
        file=h5py.File('output_file', 'x')
        matrix=np.array([[1.,1.,1.],[1.,1.,1.],[1.,1.,1.]])
        dset=output_file.create_dataset('dset', data=matrix, dtype='float32')
        

        对你有帮助吗?

        【讨论】:

          猜你喜欢
          • 2020-10-01
          • 2019-01-06
          • 2019-05-19
          • 2014-02-26
          • 2020-07-25
          • 2013-04-19
          • 2017-06-12
          • 2019-04-26
          相关资源
          最近更新 更多