问题标签 [hdf5]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R 和 HDF5 问题
我正在尝试将 hdf5 加载到 R 中并遇到一些问题。以下是我配置环境的步骤:
- Mac OS X 10.6 上的 R 2.10.0 (x64)
- hdf5 1.8.3 通过 macports 安装
- 来自 CRAN 的 hdf5_1.6.9.tar.gz
我怀疑我遇到的问题与我的 HDF5 版本和 R 模块所期望的不兼容有关。为了完整起见,这里是我安装 R 模块的方式:
R CMD INSTALL --configure-vars='CPPFLAGS=-I/opt/local/include' --configure-args='--with-hdf5=/opt/local' hdf5_1.6.9.tar.gz
这很好。该库似乎可以毫无问题地加载,但是当我尝试加载文件时没有返回数据:
图书馆(hdf5)
hdf5load("test.h5")
空值
然而,
osx:data scott$ h5dump test.h5 HDF5 "test.h5" { GROUP "/" { DATASET "dset" { DATATYPE H5T_STD_I32LE DATASPACE SIMPLE { ( 31 ) / ( 31 ) } DATA { (0): 1, 2, 4 , 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, (14): 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 2097152, 2097152, (2) 386493, (2) , 16777216, 33554432, 67108864, 134217728, (28): 268435456, 536870912, 1073741824 } } } }
有什么想法吗?
提前致谢。
java - Python、PyTables、Java - 捆绑在一起
简而言之问题
让 Python 和 Java 相互配合的最佳方式是什么?
更详细的解释
我的情况有点复杂。我会尽量用图片和文字来解释。这是当前的系统架构:
我们有一个用 Java 编写的基于代理的建模模拟。它可以选择在本地写入 CSV 文件,也可以通过与 Java 服务器的连接远程写入HDF5文件。每次模拟运行都会产生超过 1 GB 的数据,我们会运行数十次模拟。我们需要能够对同一场景的多次运行(使用不同的随机种子)进行聚合,以便查看一些趋势(例如,最小值、最大值、中值、平均值)。可以想象,试图移动所有这些 CSV 文件是一场噩梦。每次运行会产生多个文件,就像我说的那样,其中一些是巨大的。这就是我们一直试图转向 HDF5 解决方案的原因,在该解决方案中,一项研究的所有数据都存储在一个地方,而不是分散在几十个纯文本文件中。此外,由于它是二进制文件格式,与未压缩的 CSVS 相比,它应该能够节省大量空间。
如图所示,我们对模拟的原始输出数据进行的当前后处理也是在 Java 中进行的,并读取本地输出生成的 CSV 文件。这个后处理模块使用 JFreeChart 创建一些与仿真相关的图表和图形。
问题
正如我之前提到的,CSV 确实站不住脚,并且随着我们从模拟中生成越来越多的数据,它的扩展性也不好。此外,后处理代码做的比它应该做的更多,本质上是在执行一个非常非常穷人的关系数据库的工作(基于外键(唯一代理 ID)跨“表”(csv 文件)进行连接). 在这个系统中以其他方式可视化数据也很困难(例如 Prefuse、Processing、JMonkeyEngine 在 MatLab 或 SPSS 中获取原始数据的一些子集)。
解决方案?
我的团队认为我们确实需要一种过滤和查询我们拥有的数据以及执行跨表连接的方法。鉴于这是一次写入、多次读取的情况,我们真的不需要真正的关系数据库的开销;相反,我们只需要一些方法在 HDF5 文件上放置一个更好的前端。我找到了几篇关于此的论文,例如一篇描述如何使用XQuery 作为 HDF5 文件的查询语言的论文,但该论文描述了必须编写一个编译器来将 XQuery/XPath 转换为原生 HDF5 调用,这远远超出了我们的需要。输入PyTables。它似乎完全符合我们的需要(提供两种不同的数据查询方式,通过 Python 列表理解或通过内核(C 级)搜索。
我不太确定如何将用于查询的 Python 代码、提供 HDF5 文件的 Java 代码以及对数据进行后处理的 Java 代码链接在一起。显然,我想重写大部分隐式执行查询的后处理代码,而是让优秀的 PyTables 更优雅地完成这件事。
Java/Python 选项
一个简单的谷歌搜索出现了一些用于在 Java 和 Python 之间进行通信的选项,但我对这个主题太陌生了,所以我正在寻找一些实际的专业知识和对提议的架构的批评。看起来 Python 进程应该与 Datahose 在同一台机器上运行,这样大的 .h5 文件就不必通过网络传输,而是将更小的过滤视图传输给客户端。 Pyro似乎是一个有趣的选择——有人有这方面的经验吗?
gcc - matlab mex 文件的共享库位置:
我正在尝试编写一个使用 libhdf5 的 matlab mex 函数;我的 Linux 安装提供了 libhdf5-1.8 共享库和头文件。但是,我的 Matlab 版本 r2007b 提供了 1.6 版本的 libhdf5.so。(显然,Matlab.mat
文件引导 hdf5)。当我编译 mex 时,它在 Matlab 中出现了段错误。如果我将我的 libhdf5 版本降级到 1.6(不是长期选项),代码可以编译并运行良好。
问题:我该如何解决这个问题?如何告诉 mex 编译过程链接到 /usr/lib64/libhdf5.so.6 而不是 /opt/matlab/bin/glnxa64/libhdf5.so.0 ?当我尝试-Wl,-rpath-link,/usr/lib64
在我的编译中使用它时,我会收到如下错误:
确认。最后的手段是下载 hdf5-1.6.5 标头的本地副本并完成它,但这不是未来的证明(Matlab 版本升级是我的未来。)。有任何想法吗?
编辑:根据 Ramashalanka 的出色建议,我
A) 调用mex -v
以获取 3 个gcc
命令;最后是链接器命令;
B)用 a 调用该链接器命令-v
以获取collect
命令;
C)调用它collect2 -v -t
和其余的标志。
我的输出的相关部分:
所以,实际上libhdf5.so
from/usr/lib64
正在被引用。但是,我相信这会被环境变量覆盖,我LD_LIBRARY_PATH
的 Matlab 版本会在运行时自动设置它,因此它可以找到自己的版本,例如libmex.so
,等等。
我认为该crt_file.c
示例既可以使用 b/c,也可以不使用我正在使用的函数 ( H5DOpen
,在从 1.6 到 1.8 的移动中具有签名更改(是的,我正在使用-DH5_USE_16_API
)),或者不太可能,b/ c 它不会击中需要 hdf5 的 Matlab 内部部件。确认。
python - 在 Mac OS X 10.6.3 中安装 h5py
我正在尝试在 Mac OS X 10.6.3 中安装 h5py。
首先我安装了 HDF5 1.8,它使用了以下命令:
然后安装 h5py:
然后我得到了错误:
我刚刚更新了我的 Xcode,我不知道这是否是因为我的 gcc 的默认设置。如果是这样,我怎样才能摆脱这个错误?
谢谢。
c# - HDF5 .Net 包装器
我得到(http://www.hdfgroup.org/projects/hdf.net/)
指定的模块无法找到。(来自 HRESULT 的异常:0x8007007E)
从依赖步行者我看到 SZLIBDLL.DLL 丢失了我试图从随机位置下载它,但后来又出现了另一个错误。
有人遇到过这个问题吗?我也试过 vs2005 和 vs2008
谢谢,皮尼。
python - 将 h5py 数据集输出到文本的快速方法是什么?
我正在使用 h5py python 包读取 HDF5 格式的文件。(例如 somefile.h5) 我想将数据集的内容写入文本文件。
比如我想创建一个文本文件,内容如下:1,20,31,75,142,324,78,12,3,90,8,21,1
我可以使用以下代码访问 python 中的数据集:
我天真的方法太慢了,因为我的数据集有超过 20000 个条目:
有没有更快的方法将其写入文件?也许我可以将数据集转换为 NumPy 数组甚至 Python 列表,然后使用一些文件编写工具?
(我可以在写入文件之前尝试将值连接成一个更大的字符串,但我希望有一些更优雅的东西)
multithreading - HDF5写线程并发
HDF5 是否能够自行处理多个线程,还是必须外部同步?OpenMP 示例建议使用后者。
如果是前者,定义要写入的数据空间的正确方法是什么?
makefile - 在configure中查找底层编译器
我有一个使用编译器包装器编译的应用程序,例如h5fc/h5cc
(HDF5 编译器包装器)或mpif90/mpicc
(MPI 编译器包装器)。这些只是包装器,可以使用-show
参数查看真正的底层编译器,例如
在这两种情况下,底层编译器都是 ifort。现在我正在使用configure.ac
生成一个配置脚本来设置Makefile
,并且我希望能够向编译器添加依赖于编译器的参数,但这需要有代码configure.ac
来找出 or 的底层编译器h5fc/cc
是什么mpif90/cc
。我想这一定是可能的,但我不知道该怎么做。有没有人有什么建议?
额外的问题:事实上,在某些情况下,我需要使用h5pfc/cc
启用 MPI 的 HDF5 包装器进行编译:
这将需要迭代搜索,因为我需要做mpif90 -show
......
c# - BadImageFormatException:使用 hdf5dll.dll 调用 ImportDll
好的,我有从官网下载的HDF5库,还有几个DLL,包括hdf5dll.dll和hdf5_hldll.dll。
我有一些我认为是本地调用的包装器,在我的类H5
、、、和。来自 H5.cs 的示例:H5LT
H5F
H5T
在 Program.cs 中,我H5.H5open();
使用BadImageFormatException
. 我需要不同的 DLL 吗?方法签名看起来不对吗?
作为下一步,我想在 C# 中得到它:http ://www.hdfgroup.org/HDF5/Tutor/h5lite.html 。
操作系统: Windows 7 64 位
环境: Visual Studio 2008 Professional
更新:我不知道这是否相关,我不记得我的环境是否是 VS2008 SP1,但这个问题可能是解开谜团的关键。我现在正试图在家里重复 32 位 VS 2010 的场景。
c# - 如何在现有 HDF5 文件上创建组?(HDF5)
我有一个用 C++ 编写的第 3 方实用程序,它创建一个带有单个数据组的 HDF5 文件。
我想导入两个 H5 文件,每个文件都有一个唯一的数据组,并输出一个包含两个数据组的 H5 文件。
有没有人有在 C# 中使用 HDF5 的经验?