【问题标题】:Managing HDF5 Object Reference管理 HDF5 对象引用
【发布时间】:2017-05-25 12:20:39
【问题描述】:

我正在尝试使用以下代码在 Python 中为街景门牌号 (SVHN) 数据集 http://ufldl.stanford.edu/housenumbers/ 加载 mat 文件

import h5py
labels_file = './sv/train/digitStruct.mat'
f = h5py.File(labels_file)
struct= f.values()
names = struct[1].values()
print(names[1][1].value)

我得到[<HDF5 object reference>],但我需要知道实际的字符串

【问题讨论】:

  • 您完全确定可以使用 h5py 阅读它吗?使用的是哪个版本的 Matlab?见:http://stackoverflow.com/questions/874461/read-mat-files-in-python
  • 如果我尝试 print(names[1]) 似乎文件被解析我得到
  • 你检查过数据布局吗?在终端中使用h5dump ./sv/train/digitStruct.mat 看看发生了什么。
  • 抱歉,由于 [ 字符,问题没有很好地呈现。我已经修好了
  • 您希望找到文件名吗?

标签: python hdf5


【解决方案1】:

要了解您可以执行的数据布局

h5dump ./sv/train/digitStruct.mat

但也有其他方法,例如 visitvisititems

可以帮助您并且最近似乎已经解决了一个非常相似的问题(如果不相同)的一个很好的参考是以下 SO 帖子:
h5py, access data in Datasets in SVHN
例如sn-p:

import h5py
import numpy

def get_name(index, hdf5_data):
    name = hdf5_data['/digitStruct/name']
    print ''.join([chr(v[0]) for v in hdf5_data[name[index][0]].value])

labels_file = 'train/digitStruct.mat'
f = h5py.File(labels_file)
for j in range(33402):
    get_name(j, f)

将打印文件的名称。例如,我得到:

7459.png
7460.png
7461.png
7462.png
7463.png
7464.png
7465.png

你可以从这里概括。

【讨论】:

  • 很抱歉,由于 [ 字符,问题没有很好地呈现。我已经修好了。请检查一下,非常感谢。
  • 如果我尝试了这个,它真的很慢(在一个好的 i7 上获得 50 个名字大约需要 3 分钟),你有什么想法吗?
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 2013-04-24
  • 2018-05-07
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多