如何打开大 (2GB) 文件并更快地对其进行预计算?

问题描述

这是我目前用来打开这个非常大的 matlab 文件的代码:

cat file.txt | grep '^(.*?):'

完全加载大约需要 3-5 分钟。如何改进此代码以加快流程?

解决方法

保存和使用对象很容易。在不知道代码用途的情况下,很难提供有关对象与数组的详细信息。得到变量 <div id="to-do-1"><p>Test</p></div> <button onclick="myFunction()">Click Me!</button> <script> function myFunction() { document.getElementById("to-do-1").style.display = "inline"; } </script> <style> #to-do-1 { display: none; } </style> 后想做什么?您检索所有数据集,然后继续重新定义 self.data。最后,您将 self.data 分配给第一个数据集的数组。此外,self.data 指向第二个数据集中的单个值。所以,不清楚你为什么要检索所有这些。

如果你只想要第一个数据集中的数据,这样的事情就可以了。

self.fs

如果您想要所有数据集中的名称和数据,这将返回名称和对象的字典。

f = h5py.File(filepath,'r')
# returns first key from group member names:
dsname = next(iter(f))    #  (name of 1st dataset)
self.data = f[dsname][:]  #  (data from 1st dataset)

然后,当您需要一组数据时,请使用以下方法之一:

f = h5py.File(filepath,'r')
for k,v in f.items():
    self.data[k] = v 

要了解发生了什么,让我们从一些 HDF5 基础知识开始。使用 HDF5 时理解架构至关重要。数据结构类似于计算机上的文件夹和文件。文件夹是“组”,文件是“数据集”。使用 h5py,您可以使用字典语法访问群组成员,并且使用 NumPy 数组语法访问数据集。 (h5py File 对象的行为类似于 Group。)

因此,当您执行 arr = data['a dataset name'][:] # for 1 dataset (when you know the name) for dsname,obj in data.items(): # loop thru all pairs in data arr = obj[:] # or arr = f[dsname][:] 时,h5py 为每个组成员返回 for k,v in f.items() 对(代码中的 key,value)。 k,v对象的名称keyh5py 对象(数据集或其他组)。

拥有数据集后,有 3 种方法可以访问关联数据:

  1. 您可以简单地保存对象并将其引用为“好像”它是一个 NumPy 数组。
  2. 您可以保存对象的名称,然后当您需要对象的数据时,您可以使用数据集名称和关联的组进行检索。
  3. 您可以将数据集值读入 NumPy 数组。 (这就是您的代码所做的。)

注意:我更喜欢方法 #1 和 #2,因为它们在您读取数据之前,它们不会将数据加载到内存中

这是您的代码以及我对每个步骤的评论:

value

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...