使用 astype 在 H5py 中创建对 HDF 数据集的引用

2023-12-21

来自h5py 文档 http://docs.h5py.org/en/latest/high/dataset.html#Dataset.astype,我发现我可以使用以下命令将 HDF 数据集转换为另一种类型astype数据集的方法。这会返回一个上下文管理器,它会即时执行转换。

但是,我想读取存储为的数据集uint16然后将其投射到float32类型。此后,我想以不同的函数从该数据集中提取各种切片作为转换类型float32。该文档将其用途解释为

with dataset.astype('float32'):
   castdata = dataset[:]

这将导致整个数据集被读入并转换为float32,这不是我想要的。我想引用数据集,但将其转换为float32相当于numpy.astype。如何创建对.astype('float32')对象以便我可以将其传递给另一个函数使用?

一个例子:

import h5py as HDF
import numpy as np
intdata = (100*np.random.random(10)).astype('uint16')

# create the HDF dataset
def get_dataset_as_float():
    hf = HDF.File('data.h5', 'w')
    d = hf.create_dataset('data', data=intdata)
    print(d.dtype)
    # uint16

    with d.astype('float32'):
    # This won't work since the context expires. Returns a uint16 dataset reference
       return d

    # this works but causes the entire dataset to be read & converted
    # with d.astype('float32'):
    #   return d[:]

此外,似乎 astype 上下文仅在访问数据元素时适用。这意味着

def use_data():
   d = get_data_as_float()
   # this is a uint16 dataset

   # try to use it as a float32
   with d.astype('float32'):
       print(np.max(d))   # --> output is uint16
       print(np.max(d[:]))   # --> output is float32, but entire data is loaded

那么有没有一种类似 numpy 的方式来使用 astype 呢?


d.astype()返回一个AstypeContext目的。如果你查看源代码AstypeContext你会更好地了解正在发生的事情:

class AstypeContext(object):

    def __init__(self, dset, dtype):
        self._dset = dset
        self._dtype = numpy.dtype(dtype)

    def __enter__(self):
        self._dset._local.astype = self._dtype

    def __exit__(self, *args):
        self._dset._local.astype = None

当您输入AstypeContext, the ._local.astype数据集的属性将更新为新的所需类型,当您退出上下文时,它会更改回其原始值。

因此,您或多或少可以获得您正在寻找的行为,如下所示:

def get_dataset_as_type(d, dtype='float32'):

    # creates a new Dataset instance that points to the same HDF5 identifier
    d_new = HDF.Dataset(d.id)

    # set the ._local.astype attribute to the desired output type
    d_new._local.astype = np.dtype(dtype)

    return d_new

当你现在读到d_new, 你会得到float32numpy 数组返回而不是uint16:

d = hf.create_dataset('data', data=intdata)
d_new = get_dataset_as_type(d, dtype='float32')

print(d[:])
# array([81, 65, 33, 22, 67, 57, 94, 63, 89, 68], dtype=uint16)
print(d_new[:])
# array([ 81.,  65.,  33.,  22.,  67.,  57.,  94.,  63.,  89.,  68.], dtype=float32)

print(d.dtype, d_new.dtype)
# uint16, uint16

请注意,这不会更新.dtype的属性d_new(这似乎是不可变的)。如果您也想更改dtype属性,您可能需要子类化h5py.Dataset为了这样做。

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

使用 astype 在 H5py 中创建对 HDF 数据集的引用 的相关文章

  • 使用 matplotlib 在图像数据之上对线网格进行像素精确定位

    我试图在 python 库 matplotlib 显示的图像网格顶部精确地覆盖 1 像素宽线的网格 不幸的是 我似乎无法对结果进行足够精细的控制 以实现线网格与数据网格的正确对齐 如下面的代码所示 结果似乎总是很接近 但并不完全正确 我尝试
  • Python:用中值替换异常值

    我有一个 python 数据框 其中有一些异常值 如果这些值不存在的话 我想用数据的中值替换它们 id Age 10236 766105 11993 288 9337 205 38189 88 35555 82 39443 75 10762
  • Python(openpyxl):将数据从一个excel文件转移到另一个(模板文件)并用另一个名称保存,同时保留模板

    我有一个templateexcel 文件名为template xlsx其中有许多张 我想从单独的地方复制数据 csv文件到第一页template xlsx 命名为data 并将新文件另存为result xlsx同时保留原来的模板文件 我想粘
  • Pandas:根据其他多级列对最里面的列进行分组排序

    考虑下面的 df In 3771 df pd DataFrame A a 11 B b 11 C C1 C1 C2 C1 C3 C3 C2 C3 C3 C2 C2 D D1 D2 D1 D3 D3 D2 D4 D4 D1 D2 D3 E v
  • pandas:使用运算符链接过滤 DataFrame 的行

    大多数业务在pandas可以通过操作符链接来完成 groupby aggregate apply等 但我发现过滤行的唯一方法是通过普通的括号索引 df filtered df df column value 这没有吸引力 因为它需要我分配d
  • 如何计算具有较大中间值的总和

    我想计算 for n m两个值都是 1000 以内的整数 最终结果是一个不大于 1000 的数字n但中间值对于 python 来说太大了 无法处理 你怎么解决这个问题 我将函数定义如下 from scipy misc import comb
  • 如何使用 Tkinter 创建等宽网格列?

    如何强制 Tkinter 应用程序窗口中的列宽度相等 tkdocs网站声明如下 每列的宽度 或每行的高度 取决于列或行中包含的小部件的宽度或高度 这意味着当绘制用户界面并将其划分为行和列时 您无需担心每列或行的宽度相等 或高度 大概 TkD
  • Django外键:获取相关模型?

    是否可以通过外键字段本身获取外键的相关模型 例如 如果我有 3 个模型 class ModelA models Model field1 models CharField max length 10 class ModelB models
  • 如何使用 Python Flask-Security 使用 bcrypt 加密密码?

    我正在尝试使用 Flask Security 文档中的标准基本示例 并使其正常工作 除了密码以明文形式存储之外 我知道这一行 user datastore create user email email protected cdn cgi
  • 在 PyQt 中使用 Windows 7 任务栏功能

    我正在寻找有关将一些新的 Windows 7 任务栏功能集成到我的 PyQt 应用程序中的信息 具体来说 如果已经存在使用新进度指示器的可能性 see here http www petri co il wp content uploads
  • 仅打印字符串中的元音

    我是Python新手 我正在尝试打印字符串中的所有元音 因此 如果有人输入 嘿 一切都好吗 所有元音都需要打印 但我不知道怎么做 所以这不是计算元音 而是打印元音 现在我已经得到了这个 sentence input Enter your s
  • VS Code Pylance 不突出显示变量和模块

    我正在使用带有 Python 和 Pylance 扩展的 VS Code 我遇到的问题是 Pylance 扩展没有对模块和数据框等内容进行语法突出显示 我希望顶部的模块为绿色 df 变量为蓝色 我正在使用默认的深色 颜色主题 这是我的 VS
  • 如何下载和使用对象检测数据集(例如 coco 或 pascal)

    我对物体检测领域非常陌生 我想知道是否有人可以帮助我下载和使用对象检测数据集 例如 coco 或 pascal 当我下载数据集后访问他们的网站时 我觉得我不知道应该如何处理它们 我知道这个问题很愚蠢 但是开始的提示可能非常有用 谢谢 我正在
  • Python:如何访问 Lotus Notes 8.5 Inbox 来阅读电子邮件

    我想用 python 创建一个脚本 从 Lotus Notes 8 5 读取电子邮件 然后在 jira 中为每封电子邮件创建一个问题 但当我尝试从 Lotus 读取邮件时 它会返回此错误 Traceback most recent call
  • 纯Python库读写jpeg格式

    伙计们 我正在寻找 jpeg 写入 阅读会很好 但不是必需的 库的纯 python 实现 我只在以下位置创建了 TonyJPEG 库端口 http mail python org pipermail image sig 2004 Novem
  • FileAllowed 不显示错误消息

    我正在使用 WTForms 我正在对文件上传应用验证 并将其限制为仅 jpg png 和 pdf 格式 但是 如果我输入不正确 则不会出现错误消息 我按照这个教程https flask wtf readthedocs io en stabl
  • 通过 Tweepy 在 Twitter 上更新状态时的回溯

    我一直在尝试使用 Twitter 在 Twitter 上发布我的 Rpi 读数tweepy 但首先我想检查一下是否tweepy本来可以正常工作 但事实并非如此 我正确安装了软件包 但是当我尝试运行简单的代码来发布某些内容时 出现错误 是的
  • 使用 PyCharm 分析 Django

    即使在开发环境中 我的应用程序也相当慢 所以我想找出是什么导致它变慢 以便我可以尝试修复它 我了解调试工具栏 根据它的报告 数据库查询和下载的源都不是问题 所以它一定是业务逻辑 但是 我无法使用 Django 服务器运行 PyCharm 分
  • 如果我更改当前工作目录,为什么 __file__ 会变成无效路径?

    执行中test py from tmp import os print os path abspath file os chdir var print os path abspath file output tmp test py var
  • pylint:忽略 rcfile 中的多个

    在我的 django 项目中 我使用的是外部编写的应用程序 但编写得很糟糕 现在我想从我的 pylint 报告中忽略这个应用程序 但是我无法让 pylint 忽略它 Pylint 已经忽略了南方的迁移 如下所示 MASTER ignore

随机推荐

  • 如何使用 glide 下载存储在 firebase 中的图像的缩略图

    我想从我的 firebase 存储中下载图像缩略图而不是整个图像 我正在使用 glide 来加载图像 但我不知道如何加载图像缩略图 因为它会更快且内存效率更高 您首先需要为图像创建缩略图 可能使用类似谷歌云功能 https cloud go
  • 使用 PyPdf2 更改 pdf 书签的顺序

    我创建了一个应用程序 将多个 pdf 与书签合并 如果原始pdf已经有书签 我想保留它们并在pdf的开头添加一个书签 我使用以下代码 title和path代码中的内容来自用户输入 from PyPDF2 import PdfFileRead
  • Windows 过滤平台可从托管代码中过滤 HTTPS

    我想为Windows开发一个基于主机的防火墙 主要是过滤以HTTPS开头的URL 我知道 Microsoft 正在将 WFP 作为已弃用的旧技术的替代品 例如防火墙 过滤器挂钩 NDIS TDI WSA 和 Winsock 2 LSP 但
  • 尝试序列化 GPathResult 时,Groovy XmlUtil.serialze() 抛出“序言中不允许内容”错误

    我在 Groovy 的 1 7 3 XmlUtil serialize GPathResult 方法中遇到了一个奇怪的问题 当我使用 GPathResult 调用它时 它会抛出 序言中不允许内容 错误 但 groovy util Node
  • 为什么对 jQuery $.fn.data() 的更改不会更新相应的 html 5 data-* 属性?

    下面是一个简单的示例来说明该行为 给定这个 html 标记 div div 和这个 jQuery 代码 使用 jQuery 1 5 1 read the data alert div data company returns Microso
  • 使用护照持有者的自定义错误消息

    我正在使用护照来保护我的 API 我有点难以理解在出现错误时应该如何发回自定义消息 我希望在这里找到答案 这是我所做的 路由 server js router route Applications get authController Be
  • 处理多个 NSTableView 的最佳方法

    在不使用 Cocoa Bindings 的情况下处理多个 NSTableView 的最佳方法是什么 在我的应用程序中 我有两个 NSTableViews 它们之间的关系足够密切 因此我使用相同的对象作为两者的委托和数据源 问题是两个 tab
  • 求一个数的真正大幂

    I am creating a small game for students and in a place it has to display the value of 27830457 1 如果数字不是那么大 我可以调用 BigInte
  • ReactJS + Socket.IO - 处理套接字连接的最佳方式

    我正在尝试使用 Node 和 Socket IO 制作一个 ReactJS 实时应用程序 但我很难找出在客户端处理套接字连接的最佳方法 我有多个 React 组件 它们都需要来自服务器的一些信息 并且最好通过套接字连接实时获取 但导入时so
  • 具有多个条件的 VLOOKUP 在一个单元格中返回值

    我发现这个 VBA 能够使用一个匹配条件将所有匹配值返回到一个单元格中 Function MYVLOOKUP pValue As String pWorkRng As Range pIndex As Long Update 20150310
  • 输入文件 onchange 事件未在 Chrome 中触发

    这是我在 chrome 中注意到的一件奇怪的事情 如果用户选择一个文件 然后再次打开文件对话框再次选择同一文件 则 chrome 不会触发 onchange 事件 而 firefox 会触发 有人也注意到了吗 这是 Chrome 的一项已知
  • 锁和监视器可以安全地用于同一个对象吗?

    我有以下情况 我想相互排除对对象的访问 到目前为止我通常会使用锁对象 object lockObject new object method1 lock lockObject CODE1 现在我还有一个可以从另一个线程调用的方法 它不应该被
  • 设备中的sign_in_and_redirect如何工作?

    if user persisted sign in and redirect user event gt authentication this will throw if user is not activated set flash m
  • 如何为一组目标创建 Maven 别名?

    我正在配置一个 Maven 项目并希望能够使用别名 例如 mvn server 执行mvn clean package tomcat run Grunt 任务运行器做得很好 但我还没有找到在 Maven 中做同样事情的方法 是否可以 您可以
  • 如何阅读 C 声明?

    我听说过一些方法 但没有一个能坚持下来 就我个人而言 我尝试避免 C 中的复杂类型 并尝试将它们分解为组件 typedef 我现在面临着维护一些来自所谓的 三星级程序员 的遗留代码 并且我很难阅读一些 代码 如何阅读复杂的 C 声明 本文解
  • Autohotkey 多个热键映射到同一功能

    我有几个热键 它们都做同样的事情 我有多个热键 所以我可以在我的手当时在的任何地方调用它们 并且可以在多个键盘上使用 例如 Send Media Next XButton2 RButton Send Media Next SC15D Sen
  • 如何在搅拌机中导出带有纹理的.obj格式文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 First of all i am new in blender i have attached texture from tree ob
  • 爪哇 |整数运算符;

    我用 Java 编程大约一年了 但仍然发现了一些我不知道的东西 如何 new Font FontFamily TIMES ROMAN 12 1 4 如何 可以处理整数吗 谢谢 附 我用谷歌搜索了很多 The 运算符计算 按位或 http d
  • Windows 中崩溃进程的可预测退出代码

    对于Windows中正常退出的进程来说 进程的退出码一般是以下的返回值 main 或传递给的退出代码std exit ERRORLEVEL 然后可以用于查询退出代码 并且可以用于确定程序是否正确执行 或者是否存在一些指示特定问题 特定于应用
  • 使用 astype 在 H5py 中创建对 HDF 数据集的引用

    来自h5py 文档 http docs h5py org en latest high dataset html Dataset astype 我发现我可以使用以下命令将 HDF 数据集转换为另一种类型astype数据集的方法 这会返回一个