gzip.open().read() 的大小参数

2024-04-19

当与gzipPython 中的库,我经常遇到使用.read()函数的模式如下所示:

with gzip.open(filename) as bytestream:
    bytestream.read(16) 
    buf = bytestream.read(
        IMAGE_SIZE * IMAGE_SIZE * num_images * NUM_CHANNELS
    )
    data = np.frombuffer(buf, dtype=np.uint8).astype(np.float32)

虽然我熟悉上下文管理器模式,但我很难真正理解上下文管理器中的第一行代码是什么with上下文管理器正在做的事情。

这是该文档的文档read()功能:

从流中最多读取 n 个字符。

从底层缓冲区读取,直到有 n 个字符或到达 EOF。 如果 n 为负数或被省略,则读取直到 EOF。

如果是这样的话,第一行的功能作用bytestream.read(16)必须读取并跳过前 16 个字符,大概是因为它们充当元数据或标题。但是,当我有一些图像时,我怎么知道使用16作为论证read打电话,而不是说 32 或 8 或 64?

我记得很多时候遇到与上面完全相同的代码,除了让作者使用bytestream.read(8)代替bytestream.read(16)或者同样可能是任何其他值。逐个字符地研究文件显示没有可辨别的模式来确定标题字符的长度。

换句话说,一个人如何确定要使用的参数read函数调用?或者如何知道 gzip 压缩文件中标头字符的长度?

我的猜测是它与字节有关,但在搜索文档和在线参考资料后我无法确认这一点。

可重复的细节

经过无数个小时的故障排除后,我的假设是前 16 个字符代表某种标头或元数据。所以该代码中的第一行是跳过 16 个字符并将剩余的存储在名为的变量中buf。然而,在深入研究数据后,我发现无法确定为什么或如何选择值 16。我已经逐个字符地读取了字节,并且还尝试将它们读取+转换为np.float,但没有明显的模式表明元数据在第 16 个字符结束,而实际数据从第 17 个字符开始。

下面的代码读取数据这个网站 http://yann.lecun.com/exdb/mnist/并提取前 30 个字符。请注意,标题行“结束”的位置(显然是在第二次出现 \x1c` 之后的第 16 行)和数据开始的位置是难以辨别的:

import gzip
import numpy as np

train_data_filename = 'data_input/train-images-idx3-ubyte.gz'
IMAGE_SIZE = 28
NUM_CHANNELS = 1

def extract_data(filename, num_images):
    with gzip.open(filename) as bytestream:
        first30 = bytestream.read(30)
        return first30

first30= extract_data(train_data_filename, 10)
print(first30)
# returns: b'\x00\x00\x08\x03\x00\x00\xea`\x00\x00\x00\x1c\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

如果我们修改代码将它们转换为np.float32,这样所有字符现在都是数字(浮点),同样没有明显的模式来区分标题/元数据结束的位置和数据开始的位置。

任何参考或建议将不胜感激!


从 gzip 的角度来看,它返回给您的所有内容都是数据。那里is该数据流前面没有元数据或 gzip 特定的标头内容,因此不需要任何类型的算法来计算 gzip 在该流前面的内容量:它前面的字节数为零。


向下滚动到您链接的页面底部;有一个标题为MNIST 数据库的文件格式.

该格式规范准​​确地告诉您格式是什么,以及每个标头使用了多少字节。具体来说,每个文件的前四项描述如下:

0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  60000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 

因此,如果您想跳过所有这四个项目,则需要从顶部删除 16 个字节。

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

gzip.open().read() 的大小参数 的相关文章

随机推荐

  • 如何将 ReactJS 与 Spring Boot 集成

    我想整合ReactJS with 弹簧启动 and maven但我不知道怎么做 我可以使用 npm 来安装它 但我不知道将在哪个路径中执行此操作 npm init npm install save react react dom See 前
  • 如何在 logback 自动加载 logback.xml 之前定义 logback 变量/属性?

    我的公司有一个环境管理工具 使您能够使用 Java 以编程方式从环境中查找属性 我想利用这个工具来配置 logback 例如 假设我有一个 logback xml 如下 特别是文件附加器部分
  • 如何在spec2中使用mockito定义自定义参数匹配器?

    我想验证业务逻辑是否通过预期user反对 dao 但我不知道如何为其编写自定义参数匹配器 user should be saved in val dao new UserDao dao save any User returns mock
  • 在 Mule 中测试子流程

    我已经开始为我的 Mule 项目编写测试用例 我为我的主流程编写了功能测试用例 如下所示 public void testMainFlow 1 throws Exception MuleClient client muleContext g
  • 如何使postMessage适用于所有子域

    In window postMessage第二个属性指定我的消息可以发送到的域 有没有办法指定它适用于所有子域 尝试过的事情 iframe contentWindow postMessage The message to send http
  • 使用 [NotNull] 作为方法的参数

    考虑这段代码 https github com aspnet Mvc blob master src Microsoft AspNet Mvc Core Builder MvcApplicationBuilderExtensions cs
  • 错误:未捕获(承诺中):TypeError:无法将属性“isAdmin”设置为 null

    firebase auth onAuthStateChanged user gt if user this isLoggedIn true Set user loggedIn is true this isAdmin false fireb
  • Java 编译错误:类版本不受支持

    我最近在 Eclipse 中完成了一个项目 它运行没有问题 然后最近我导入了一项新作业要在课堂上完成 但是当我完成旧项目时 其图标上突然出现一个 x 我查看了代码 没有任何改变 但它在控制台中抛出了这个错误 java lang Unsupp
  • JS 函数构造函数每次都要重新解析?

    在 MDN 中 关于功能及功能范围 https developer mozilla org en US docs Web JavaScript Reference Functions and function scope Function
  • Windows 10 内的 Ubuntu 中的 tkinter。错误:“没有显示名称,也没有 $DISPLAY 环境变量”

    我最近安装了适用于 Windows 10 的 Ubuntu 应用程序 以便我可以在课堂上使用它 我正在遵循一些神秘的作业指示来 尝试 tkinter 我按照位于 Ubuntu 终端窗口中的说明安装了包 python3 tk这里 如何在 ub
  • 上传 Zip 文件并解压

    我有一个表单 HTML 它将文件提交到 PHP 脚本 该脚本将文件重命名为 ZIP 将其存储在文件夹 随机名称 中 然后提取该文件 文件已上传 该文件夹已正确创建 文件被正确重命名 zip 提取失败 这是我的表格
  • 导入错误:无法导入名称 defaultdict

    我觉得这真的很奇怪ImportError跑步时from collections import defaultdict ImportError cannot import name defaultdict 我正在运行 python 2 7 奇
  • 如何在 Mac OS X 上为 Java 应用程序启用视网膜模式

    我想画完整的OSX 视网膜 http www apple com iphone features retina display html从 IDE 调试期间 Java Swing 应用程序中的解决方案 我怎样才能做到这一点 当我从 IDE
  • 直接将托管标识与 Azure B2C 或 KeyVault 结合使用

    Goal 在调用 Graph API 时防止使用客户端 ID 和密钥 以下任一情况可能吗 在使用 Azure B2C 进行身份验证的应用程序中使用 Azure 托管标识 已被授予 Microsoft Graph API 权限 从而避免使用客
  • 从流中收集连续的对

    给定一个流 例如 0 1 2 3 4 我怎样才能最优雅地将它转换成给定的形式 new Pair 0 1 new Pair 1 2 new Pair 2 3 new Pair 3 4 当然 假设我已经定义了类 Pair Edit 严格来说 这
  • 如何在导航栏 jqgrid 上添加第二个自定义删除按钮?

    我已经在使用默认删除按钮进行自定义操作 在服务器端它在删除之前复制行 我想知道如何创建第二个删除按钮 将删除操作发送到不同的 url 以便在数据库的表上删除 我不想更改当前服务器端代码上的任何内容 只想为从此按钮发送的删除操作创建新代码 我
  • 移动 Rigidbody 游戏对象的正确方法

    我刚刚开始学习Unity 我尝试使用此脚本进行简单的盒子移动 前提是 每当有人按下 w 时 盒子就会向前移动 public class PlayerMover MonoBehaviour public float speed private
  • 单场淘汰赛 - 可能的组合数量

    单场淘汰赛中 8 人参加的组合有多少种 比赛总数为 7 场 但我还需要这组比赛的组合数量 如果玩家在树中的哪个位置开始并不重要 而只关心他 她与哪些对手战斗以及他 她能坚持多久 我们可以说左边的玩家总是获胜 然后只需计算创建的方法数量最下面
  • AzureSearch-从数据源检测索引架构时出错

    我通过 REST API 在 Azure 搜索上创建了一个数据源 我使用 API 而不是门户 因为我有一个尚未在门户上处理的 rowversion 数据类型 我可以在门户上查看数据源 当我尝试将数据源导入索引时 出现以下错误 从数据源检测索
  • gzip.open().read() 的大小参数

    当与gzipPython 中的库 我经常遇到使用 read 函数的模式如下所示 with gzip open filename as bytestream bytestream read 16 buf bytestream read IMA