标签: hdf5

从SQLite和HDF5格式导出/导入到numpy,scipy

Python与SQLite(sqlite3,atpy)和HDF5(h5py,pyTables)的接口似乎有很多选择 - 我想知道是否有人有使用numpy数组或数据表(结构化/记录数组)的经验,以及其中最为无缝地与每种数据格式的"科学"模块(numpy,scipy)集成(SQLite和HDF5).

python sqlite numpy hdf5 scipy

12
推荐指数
1
解决办法
3373
查看次数

在Pandas中查询HDF5

我有以下数据(18,619,211行)存储为hdf5文件中的pandas dataframe对象:

             date    id2         w
id                              
100010 1980-03-31   10401  0.000839
100010 1980-03-31   10604  0.020140
100010 1980-03-31   12490  0.026149
100010 1980-03-31   13047  0.033560
100010 1980-03-31   13303  0.001657
Run Code Online (Sandbox Code Playgroud)

id索引在哪里,其他是列.datenp.datetime64.我需要执行这样的查询(代码当然不起作用):

db=pd.HDFStore('database.h5')
data=db.select('df', where='id==id_i & date>bgdt & date<endt')
Run Code Online (Sandbox Code Playgroud)

注意id_i, bgdt, endt是所有变量,而不是实际值,需要在循环中传递.例如:

dates 是一个Pandas Period索引或时间戳索引,无论哪种方式,我都可以互相转换.

dates=['1990-01', 1990-04','1990-09',......]  
Run Code Online (Sandbox Code Playgroud)

id_list 是一个ID列表

id_list=[100010, 100011,1000012,.......]
Run Code Online (Sandbox Code Playgroud)

循环看起来像这样(我做循环的原因是因为数据很大,我有其他数据集在同一时间查询然后执行一些操作)

db=pd.HDFStore('database.h5')
for id_i in id_list:
    for date in dates:
        bgdt=date-1 (move to previous month)
        endt=date-60 (previous 60 month)
        data=db.select('df', where='index==id_i & date>bgdt & date<endt')
        ......
Run Code Online (Sandbox Code Playgroud)

这个问题有两个部分: …

python datetime hdf5 pytables pandas

12
推荐指数
1
解决办法
7243
查看次数

如何将多个pandas数据帧连接到一个大于内存的dask数据帧?

我正在解析制表符分隔的数据以创建表格数据,我想将其存储在HDF5中.

我的问题是我必须将数据聚合成一种格式,然后转储到HDF5.这是大约1 TB大小的数据,所以我自然无法将其放入RAM中.Dask可能是完成此任务的最佳方式.

如果我使用解析我的数据来适应一个pandas数据帧,我会这样做:

import pandas as pd
import csv   

csv_columns = ["COL1", "COL2", "COL3", "COL4",..., "COL55"]
readcsvfile = csv.reader(csvfile)

total_df = pd.DataFrame()    # create empty pandas DataFrame
for i, line in readcsvfile:
    # parse create dictionary of key:value pairs by table field:value, "dictionary_line"
    # save dictionary as pandas dataframe
    df = pd.DataFrame(dictionary_line, index=[i])  # one line tabular data 
    total_df = pd.concat([total_df, df])   # creates one big dataframe
Run Code Online (Sandbox Code Playgroud)

使用dask执行相同的任务,用户应该尝试这样的事情:

import pandas as pd
import csv 
import dask.dataframe as dd
import …
Run Code Online (Sandbox Code Playgroud)

hdf5 bigdata pytables pandas dask

12
推荐指数
1
解决办法
2412
查看次数

访问 Xarray 数据集时的 HDF5 警告

我想了解导致我在以下情况下收到警告消息的原因:

在之前的操作中,我创建了一些 NetCDF 文件并使用xarray.to_netcdf().

在 jupyter 笔记本中对这些数据集进行惰性评估完全没问题,并且在以下情况下我不会收到警告/错误:

  • .nc通过打开这些文件ds = xarray.open_mfdataset('/path/to/files/*.nc')
  • 通过以下方式将尺寸数据加载到内存中ds.time.values
  • 惰性选择通过ds.sel(time=starttime)

我似乎能够在对内存加载的数据进行计算时做我想做的一切。但是,我经常在以下情况下收到相同的错误集:

  • 通过加载数据来绘图ds.sel(time=starttime).SCALAR_DATA.plot()
  • 通过提取/加载数据ts = pd.Series(ds.SCALAR_DATA.loc[:,y,x], index=other_data.index)

请注意,尽管有这些警告,我执行的操作确实会产生预期的结果(绘图、时间序列结构等)。

生成以下错误的共同点似乎是从打开的数据集中加载数据。编辑:经过一些进一步的实验,我的工作环境中的软件包版本可能会导致依赖 HDF5 的软件包版本之间发生一些冲突。

以下错误重复多次。

HDF5-DIAG: Error detected in HDF5 (1.12.2) thread 1:
  #000: H5A.c line 528 in H5Aopen_by_name(): can't open attribute
    major: Attribute
    minor: Can't open object
  #001: H5VLcallback.c line 1091 in H5VL_attr_open(): attribute open failed
    major: Virtual Object Layer
    minor: Can't open object
  #002: H5VLcallback.c line 1058 in H5VL__attr_open(): attribute open failed …
Run Code Online (Sandbox Code Playgroud)

hdf5 netcdf python-xarray netcdf4

12
推荐指数
3
解决办法
3229
查看次数

MATLAB:将几个变量保存到"-v7.3"(HDF5).使用"-append"标志时,.mat文件似乎更快.怎么会?

注意: 这个问题涉及2011年使用旧的MATLAB版本(R2009a)观察到的问题.根据2016年7月以下的更新,MATLAB中的问题/错误似乎不再存在(使用R2016a进行测试;向下滚动到问题末尾以查看更新).

我正在使用MATLAB R2009b,我需要编写一个更大的脚本,将更大的.zip文件集的内容转换为v7.3 mat文件(带有底层的HDF5-datamodel).读书还可以.问题在于储蓄.实际上没有问题.使用save命令可以很好地保存我的文件.

从某种意义上说,我的问题更多:为什么我在MATLAB中观察到以下令人惊讶的(对我来说)行为?

让我们来看看我的问题.在当前的测试场景中,我将生成一个输出:A -v7.3 mat-file.此.mat文件将包含40 个块作为单个变量.每个变量将从1到40命名为"block_NNN",并包含一个带字段frameblockNo的结构.场包含480x240x65的uint8 imagedata序列(这里只是使用randi生成的随机数据).字段块包含块编号.

备注:在真实的脚本中(我还没有完成)我将完成上述总共370次,转换总共108GB的原始数据.这就是为什么我关注以下内容.

无论如何,首先我定义一些通用变量:

% some sizes for dummy data and loops:
num_blockCount = 40;
num_blockLength = 65;
num_frameHeight = 480;
num_frameWidth = 240;

然后,我生成一些形状和大小与实际原始数据相同的虚拟代码:

% generate empty struct:
stu_data2disk = struct();

% loop over blocks:
for num_k = 1:num_blockCount

   % generate block-name:
   temp_str_blockName = sprintf('block_%03u', num_k);

   % generate temp struct for current block:
   temp_stu_value …

file-io matlab file hdf5 mat-file

11
推荐指数
1
解决办法
6350
查看次数

HDF5 C++接口:编写动态2D数组

我正在使用HDF5 C++ API编写2D数组数据集文件.HDF小组有一个例子来创建一个静态定义的数组大小的HDF5文件,我已经修改过以满足下面的需求.然而,我需要动态阵列,其中两个NXNY在运行时确定.我找到了另一种使用"new"关键字创建2D数组的解决方案,以帮助创建动态数组.这是我有的:

#include "StdAfx.h"
#include "H5Cpp.h"
using namespace H5;

const H5std_string FILE_NAME("C:\\SDS.h5");
const H5std_string DATASET_NAME("FloatArray");
const int NX = 5; // dataset dimensions
const int NY = 6;

int main (void)
{
    // Create a 2D array using "new" method
    double **data = new double*[NX];
    for (int j = 0; j < NX; j++)         // 0 1 2 3 4 5
    {                                    // 1 2 3 4 5 6 …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-data hdf5 multidimensional-array

11
推荐指数
2
解决办法
9287
查看次数

如何在pytables/hdf5中存储宽表

我有来自csv的数据,它有几千列和一万(左右)行.在每列中,数据具有相同的类型,但不同的列具有不同类型的数据*.以前我一直在从numpy和磁盘上存储数据,但它很慢,特别是因为通常我想加载一些列的子集而不是所有列.

我想使用pytables将数据放入hdf5,我的第一种方法是将数据放在一个表中,每个csv列有一个hdf5列.不幸的是,这不起作用,我假设因为512(软)列限制.

存储此数据的合理方法是什么?

*我的意思是,从文本转换后的数据类型.

python numpy hdf5 pytables

11
推荐指数
1
解决办法
1817
查看次数

HDF5的快速读/写性能推荐压缩是什么(在Python/pandas中)?

我已多次阅读过在HDF5中打开压缩可以带来更好的读/写性能.

我想知道什么样的理想设置可以在以下方面实现良好的读/写性能:

 data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
Run Code Online (Sandbox Code Playgroud)

我已经在使用fixed格式(即h5py),因为它比它更快table.我有强大的处理器,并不关心磁盘空间.

我经常存储DataFramefloat64str类型的约文件.2500行×9000列.

compression hpc hdf5 h5py pandas

11
推荐指数
1
解决办法
4110
查看次数

大数据上的增量PCA

我刚刚尝试使用sklearn.decomposition中的IncrementalPCA,但它之前就像PCA和RandomizedPCA一样抛出了MemoryError.我的问题是,我试图加载的矩阵太大而无法放入RAM中.现在它作为shape~(1000000,1000)的数据集存储在hdf5数据库中,所以我有1.000.000.000 float32值.我认为IncrementalPCA批量加载数据,但显然它试图加载整个数据集,这没有帮助.这个库是如何使用的?hdf5格式是问题吗?

from sklearn.decomposition import IncrementalPCA
import h5py

db = h5py.File("db.h5","r")
data = db["data"]
IncrementalPCA(n_components=10, batch_size=1).fit(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/software/anaconda/2.3.0/lib/python2.7/site-packages/sklearn/decomposition/incremental_pca.py", line 165, in fit
    X = check_array(X, dtype=np.float)
  File "/software/anaconda/2.3.0/lib/python2.7/site-packages/sklearn/utils/validation.py", line 337, in check_array
    array = np.atleast_2d(array)
  File "/software/anaconda/2.3.0/lib/python2.7/site-packages/numpy/core/shape_base.py", line 99, in atleast_2d
    ary = asanyarray(ary)
  File "/software/anaconda/2.3.0/lib/python2.7/site-packages/numpy/core/numeric.py", line 514, in asanyarray
    return array(a, dtype, copy=False, order=order, subok=True)
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper (-------src-dir-------/h5py/_objects.c:2458)
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper …
Run Code Online (Sandbox Code Playgroud)

python hdf5 bigdata pca scikit-learn

11
推荐指数
1
解决办法
6639
查看次数

何时在 Tensorflow 模型保存中使用 .ckpt、.hdf5 和 .pb 文件扩展名?

Tensorflow 解释说,模型可以保存为三种文件格式:.ckpt 或 .hdf5 或 .pb。有很多文档,因此最好对何时使用哪种文件格式进行更简单的比较。

这是我目前的理解:

卡普特

https://www.tensorflow.org/guide/checkpoint

检查点捕获模型使用的所有参数(tf.Variable 对象)的确切值。检查点不包含模型定义的计算的任何描述,因此通常仅在将使用保存的参数值的源代码可用时才有用。

因此,当您知道源代码相同时,您似乎应该在训练期间使用 cpkt 进行检查点检查。为什么推荐超过 .pb 和 .hdf5?它节省空间吗?它是否包含其他文件格式不包含的数据?

同样来自https://www.tensorflow.org/guide/checkpoint

另一方面,SavedModel 格式除了参数值(检查点)之外还包括模型定义的计算的序列化描述。这种格式的模型独立于创建模型的源代码。因此,它们适合通过 TensorFlow Serving、TensorFlow Lite、TensorFlow.js 或其他编程语言(C、C++、Java、Go、Rust、C# 等 TensorFlow API)的程序进行部署。

SavedModel 格式是 .pb 加上一些元数据。那么在部署模型时应该保存在 .pb 中吗?

HDF5

仅在保存模型权重(数字矩阵)时使用?

python hdf5 tensorflow tensorflow2.0 ckpt

11
推荐指数
1
解决办法
3017
查看次数