使用 h5py 打乱 HDF5 数据集

2023-12-08

我有一个很大的 HDF5 文件(~30GB),我需要对每个数据集中的条目(沿着 0 轴)进行洗牌。浏览 h5py 文档我也找不到randomAccess or 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(dataset)。在我配备 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()

混洗几个较小数据集的性能不应比这更差。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 h5py 打乱 HDF5 数据集 的相关文章

随机推荐

  • 将第一个 div 向左对齐,随后的 div 向右对齐

    我希望在同一水平线上显示三段文本 如下所示 Chapter one Language English 我在用 代表窗口的最左边或最右边 这就是我现在所拥有的 div div Chapter one div div Language div
  • 使用 VBScript 更改快捷方式中的目标

    我正在尝试创建 VBScript 来更改链接中的目标 目前的目标是 C Program Files Hyland Application Enabler AEClient exe 我希望新的目标是 C Program Files Hylan
  • 自定义任务运行程序方法抛出 ArgumentException

    由于 CultureInfo 没有从一个线程复制到另一个线程 所以我制定了以下方法来为我做这件事 public static StartCustomTask Action action TaskCreationOptions tco Tas
  • 使用 Exchange 服务和 OAuth 订阅推送通知时出现 401 未经授权

    我正在尝试使用 oauth 访问 EWS 托管 API 订阅推送通知 如下所示 var authenticationTask await authenticationContext AcquireTokenAsync https outlo
  • 测试套件运行失败 TypeError: Cannot set property 'content' of null 在 Jest 中运行

    我正在基于 Vue 的项目编写测试 并且我是 Framwork Jest 和 Vue 测试 Utils 的新手 我还没有找到类似问题的解决方案 我尝试过几个组件 但错误总是类似 示例 test js import shallowMount
  • 如何拒绝/关闭特定来电号码

    在我的应用程序中 我想阻止特定的传入号码 我进行谷歌搜索 然后执行以下操作阻止来电 Android 但这段代码对我不起作用 我正在测试安卓2 3 5 我这里没有活动课 gt gt 第一类是扩展BroadcastReceiver 清单文件
  • 如何知道应用程序在android中运行了多长时间?

    我正在android中做一个应用程序 它需要知道应用程序运行了多长时间 有谁知道如何检索此类信息 android 有什么方法可以提供有关正在运行的应用程序的信息 从它们运行的 时间来看 我不知道有什么方法可以处理这个问题 但你可以简单地自己
  • 如何强制 xslt 转换将数据加载到 cdata 部分?

    我有一个客户要求我提供给他们的 xml 中的所有文本都位于 CDATA 部分中 我知道文本不需要在 CDATA 中 因为它在提供给客户端时已经被解析和转换 然而 无论我多么确定 他们仍然需要 CDATA 部分 叹 我正在使用 Saxon 9
  • 如何检测 facebook 的 FB.init 何时完成

    旧的 JS SDK 有一个名为 FB ensureInit 的函数 新的SDK似乎没有这样的功能 我如何确保在完全启动之前我不会进行api调用 我把它放在每页的顶部 div div
  • 将 Objective-C typedef 转换为其等效字符串

    假设我在 h 文件中声明了一个 typedef 如下所示 typedef enum JSON XML Atom RSS FormatType 我想构建一个将 typedef 的数值转换为字符串的函数 例如 如果消息 self toStrin
  • Android - 如何获取应用程序名称? (不是包名)

    在我的清单中我有
  • 使用 System.AccessToken 创建服务端点

    目前 我们使用特定的用户名和 PAT 来进行 Azure DevOps REST API 调用 但从维护和脆弱性的角度来看 这不是一个好的解决方案 我们想改用 OAuth 令牌 我们遇到问题的一种情况是尝试从管道生成服务端点 我可以使用以下
  • 使用c#获取系统信息[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何获取计算机的系统信息 系统制造商 系统型号 Bios版本 您可以使用以下方式获取制造商名称 添加引用System Management System Management S
  • java dom getTextContent() 问题

    当我尝试访问我的 xml 数据时doGet我的 servlet 的方法 它只输出直到空白的值 包括整个值 XML 文件
  • 在 AWS iOS SDK 中,如何处理 FORCE_CHANGE_PASSWORD 用户状态

    我已经按照这里的示例进行了操作 https github com awslabs aws sdk ios samples tree master CognitoYourUserPools Sample 将交互式认知登录集成到我的 iOS 应
  • 如何识别图片中的钞票?

    我有一些欧元钞票的图片 账单完全在图像内 并且大多是平坦的 例如变形很小 并且透视倾斜很小 例如完全从钞票上方拍摄的图像 现在我不是图像识别方面的专家 我想实现以下目标 找到钞票的边界框 这样我就可以从图像其余部分的噪声中 剪掉 钞票 弄清
  • Java Graphics2D浮点精确drawOval替代品?

    因此 我尝试绘制一个圆弧并在其圆形端点周围放置一个圆 但由于舍入到最近的像素 我遇到了问题 这在某些情况下是可见的 但并非在所有情况下都是可见的 有没有办法使用浮点和抗锯齿来绘制圆来消除这种舍入误差 您可以运行此代码来查看问题 为了清晰起见
  • max深度和min深度如何与find命令一起使用?

    我想知道最大深度和最小深度如何与 find 命令一起使用 还想知道下面的命令是如何工作的 find mindepth 2 maxdepth 5 name file1 根据find 的手册页 maxdepth levels Descend a
  • 比较 Timer 与 DispatcherTimer

    有什么区别between System Windows Forms Timer and System Windows Threading DispatcherTimer 在什么情况下我们应该使用它们 有什么最佳实践吗 Windows For
  • 使用 h5py 打乱 HDF5 数据集

    我有一个很大的 HDF5 文件 30GB 我需要对每个数据集中的条目 沿着 0 轴 进行洗牌 浏览 h5py 文档我也找不到randomAccess or shuffle功能 但我希望我错过了一些东西 有谁足够熟悉 HDF5 来想出一种快速