Python与SQLite(sqlite3,atpy)和HDF5(h5py,pyTables)的接口似乎有很多选择 - 我想知道是否有人有使用numpy数组或数据表(结构化/记录数组)的经验,以及其中最为无缝地与每种数据格式的"科学"模块(numpy,scipy)集成(SQLite和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索引在哪里,其他是列.date是np.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)
这个问题有两个部分: …
我正在解析制表符分隔的数据以创建表格数据,我想将其存储在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) 我想了解导致我在以下情况下收到警告消息的原因:
在之前的操作中,我创建了一些 NetCDF 文件并使用xarray.to_netcdf().
在 jupyter 笔记本中对这些数据集进行惰性评估完全没问题,并且在以下情况下我不会收到警告/错误:
.nc通过打开这些文件ds = xarray.open_mfdataset('/path/to/files/*.nc')ds.time.valuesds.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) 注意: 这个问题涉及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",并包含一个带字段frame和blockNo的结构.场帧包含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 … 我正在使用HDF5 C++ API编写2D数组数据集文件.HDF小组有一个例子来创建一个静态定义的数组大小的HDF5文件,我已经修改过以满足下面的需求.然而,我需要动态阵列,其中两个NX和NY在运行时确定.我找到了另一种使用"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) 我有来自csv的数据,它有几千列和一万(左右)行.在每列中,数据具有相同的类型,但不同的列具有不同类型的数据*.以前我一直在从numpy和磁盘上存储数据,但它很慢,特别是因为通常我想加载一些列的子集而不是所有列.
我想使用pytables将数据放入hdf5,我的第一种方法是将数据放在一个表中,每个csv列有一个hdf5列.不幸的是,这不起作用,我假设因为512(软)列限制.
存储此数据的合理方法是什么?
*我的意思是,从文本转换后的数据类型.
我已多次阅读过在HDF5中打开压缩可以带来更好的读/写性能.
我想知道什么样的理想设置可以在以下方面实现良好的读/写性能:
data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
Run Code Online (Sandbox Code Playgroud)
我已经在使用fixed格式(即h5py),因为它比它更快table.我有强大的处理器,并不关心磁盘空间.
我经常存储DataFrame第float64和str类型的约文件.2500行×9000列.
我刚刚尝试使用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) 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
仅在保存模型权重(数字矩阵)时使用?