python – 使用h5py随机播放HDF5数据集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用h5py随机播放HDF5数据集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2213字,纯文字阅读大概需要4分钟。
内容图文
![python – 使用h5py随机播放HDF5数据集](/upload/InfoBanner/zyjiaocheng/773/1b0cf7c19da64e94be4e9bb4d5663d99.jpg)
我有一个大的HDF5文件(~30GB),我需要在每个数据集中随机输入(沿0轴).通过h5py文档查看我无法找到randomAccess或shuffle功能,但我希望我错过了一些东西.
是否有人熟悉HDF5,想到一种快速随机播放数据的方法?
这是我用我有限的知识实现的伪代码:
for dataset in datasets:
unshuffled = range(dataset.dims[0])
while unshuffled.length != 0:
if unshuffled.length <= 100:
dataset[:unshuffled.length/2], dataset[unshuffled.length/2:] = dataset[unshuffled.length/2:], dataset[:unshuffled.length/2]
break
else:
randomIndex1 = rand(unshuffled.length - 100)
randomIndex2 = rand(unshuffled.length - 100)
unshuffled.removeRange(randomIndex1..<randomIndex1+100)
unshuffled.removeRange(randomIndex2..<randomIndex2+100)
dataset[randomIndex1:randomIndex1 + 100], dataset[randomIndex2:randomIndex2 + 100] = dataset[randomIndex2:randomIndex2 + 100], dataset[randomIndex1:randomIndex1 + 100]
解决方法:
您可以使用random.shuffle(数据集).对于配备Core i5处理器,8 GB RAM和256 GB SSD的笔记本电脑上的30 GB数据集,这需要11分钟多一点.请参阅以下内容:
>>> import os
>>> import random
>>> import time
>>> import h5py
>>> import numpy as np
>>>
>>> h5f = h5py.File('example.h5', 'w')
>>> h5f.create_dataset('example', (40000, 256, 256, 3), dtype='float32')
>>> # set all values of each instance equal to its index
... for i, instance in enumerate(h5f['example']):
... h5f['example'][i, ...] = ... np.ones(instance.shape, dtype='float32') * i
...
>>> # get file size in bytes
... file_size = os.path.getsize('example.h5')
>>> print('Size of example.h5: {:.3f} GB'.format(file_size/2.0**30))
Size of example.h5: 29.297 GB
>>> def shuffle_time():
... t1 = time.time()
... random.shuffle(h5f['example'])
... t2 = time.time()
... print('Time to shuffle: {:.3f} seconds'.format(str(t2 - t1)))
...
>>> print('Value of first 5 instances:\n{}'
... ''.format(str(h5f['example'][:10, 0, 0, 0])))
Value of first 5 instances:
[ 0. 1. 2. 3. 4.]
>>> shuffle_time()
Time to shuffle: 673.848 seconds
>>> print('Value of first 5 instances after '
... 'shuffling:\n{}'.format(str(h5f['example'][:10, 0, 0, 0])))
Value of first 5 instances after shuffling:
[ 15733. 28530. 4234. 14869. 10267.]
>>> h5f.close()
改组几个较小数据集的性能不应该比这更差.
内容总结
以上是互联网集市为您收集整理的python – 使用h5py随机播放HDF5数据集全部内容,希望文章能够帮你解决python – 使用h5py随机播放HDF5数据集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。