问题标签 [pytables]

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.

0 投票
1 回答
750 浏览

python - PyTables 问题 - 迭代表子集时的不同结果

我是 PyTables 的新手,正在考虑使用它来处理从基于代理的建模模拟生成并存储在 HDF5 中的数据。我正在使用一个 39 MB 的测试文件,并且遇到了一些奇怪的问题。这是表的布局:

这是我在 Python 中访问它的方式:

现在事情变得奇怪了。

我不明白为什么当我遍历整个表时值会被搞砸,但当我取整组行的一小部分时却不会。我确定这是我使用该库的方式的错误,因此非常感谢您在此问题上的任何帮助。

0 投票
4 回答
3263 浏览

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似乎是一个有趣的选择——有人有这方面的经验吗?

0 投票
1 回答
894 浏览

python - Python、PyTables - 利用内核搜索

我有多个组的 HDF5 文件,其中每个组包含一个 >= 2500 万行的数据集。在模拟的每个时间步,每个智能体输出他/她在该时间步感应到的其他智能体。场景中有大约 2000 个代理和数千个时间步长;输出的 O(n^2) 特性解释了巨大的行数。

我感兴趣的是按类别计算的独特目击次数。例如,代理属于一侧,红色、蓝色或绿色。我想制作一个二维表,其中第 i 行,第 j 列是类别j中至少一个类别 i 中的代理感知到的类别中的代理数量。(我在此代码示例中使用 Sides,但我们也可以通过其他方式对代理进行分类,例如根据他们拥有的武器或他们携带的传感器。)

这是一个示例输出表;请注意,模拟不会输出蓝色/蓝色的感觉,因为它需要大量的空间而且我们对它们不感兴趣。绿绿相同)

列是

  1. 滴答时间步长
  2. senseAgentId - 进行传感的代理的 ID
  3. sensedAgentId - 被感知代理的 ID
  4. detRange - 两个代理之间的距离(以米为单位)
  5. senseType - 一个枚举类型,表示进行了何种类型的传感

这是我目前用来完成此操作的代码:

注意:我有 Java 背景,所以如果这不是 Pythonic,我深表歉意。请指出这一点并提出改进此代码的方法,我希望能更加精通 Python。

现在,这非常慢:执行此迭代和成员资格检查大约需要 50 秒,这是使用最严格的成员资格标准集(其他检测类型有更多行需要迭代)。

我的问题是,是否可以将工作从 python 移到内核搜索查询中?如果是这样,怎么做?我是否缺少一些明显的加速?我需要能够在一组运行 (~30) 和多组标准 (~5) 中为每次运行运行此功能,所以如果可以加快速度会很棒。

最后说明:我尝试使用 psyco,但这几乎没有什么不同。

0 投票
2 回答
1632 浏览

hdf5 - 使用 pyTables 创建的表的 Windows 上的 hdf 查看器?

viTables似乎只适用于 python 2.5。我已经下载了 HDFView,但是当我尝试打开按照本教程创建的表时,我收到以下错误消息:

让 HDFView 工作的任何想法?当我使用 python 中的 pyTables 使格式更通用时,我需要做些什么吗?还有其他好的 HDF 查看器吗?

顺便说一句,我刚刚发现了 PyTables,我对此感到非常兴奋。

0 投票
1 回答
618 浏览

mysql - 5000 万个节点层次结构或更大

有没有人有任何伟大的想法来实现大规模可扩展的分层数据存储?它需要快速添加并能够让站点的许多用户请求关于层次结构中某个节点下方的节点数量的报告。

剧情是这样的......

我将每小时添加大量节点。假设我想每小时添加 100 万个节点。它们可能会出现在整个层次结构中。理想情况下,规模将达到数十亿个节点,但目标是 5000 万个。我需要能够随时计算任何给定点以下的节点数,并且可能会有很多人同时进行此操作。可以将其视为许多用户(可能是 100,000 个并发用户)随时会要求提交的报告。他们可能会请求某个节点以下的所有节点。

数据库可以通过读取格式化为邻接列表(快速插入、慢速报告)的平面表的单个进程创建,也可以是标准设计,如果数据存储存在,则网站用户可以直接更新层次结构以应对正在创建的大量节点。

我已经使用 Treebeard 和 MySQL 在 Django 中实现了这个。我正在使用物化路径方法,它相当不错,但相比之下我想要闪电般的速度。使用 30,000 个节点的数据存储,我在 2 岁的笔记本电脑上运行时每分钟在树的底部实现 120 次插入。显然,我想要的远不止这些,并认为也许有更好的数据存储可供使用。也许是 PyTables、BigTable、MongoDB 或 Cassandra?

轻松集成到 Python/Django 会很好,但如果必须,我总是可以用另一种语言编写系统的这一部分。如果我们使用从平面数据存储中读取的单个进程并处理到一个非常有效的分层数据存储中,这将是完美的报告,我想我不会有并发问题会否定事务的需要。

无论如何,这足以让我们开始。使用正确的技术很容易吗?

0 投票
1 回答
703 浏览

python - 使用存储的列名作为变量名提取 PyTables 表的最有效方法

以下代码提供了我需要的功能;但是,对于包含 200 个变量和 64000 行的表来说,需要花费 10 多秒的时间。是否有更有效的方法来创建与列名匹配的变量命名空间?

代码将在分析环境中执行,占最终用户等待时间的很大一部分;所以,我想确认这是实现基于 PyTable 列名动态建立命名空间的最佳方式。

0 投票
2 回答
378 浏览

python - PyTable 列顺序

有没有办法创建具有特定列顺序的 PyTable?

默认情况下,当使用字典或类来调用 createTable() 时,列按字母顺序排列。我需要建立一个特定的顺序,然后使用 numpy.genfromtxt() 从文本中读取和存储我的数据。不幸的是,我的文本文件没有像文件数据那样包含变量名。

此时,我的列按字母顺序排列,数据未对齐,因为它是根据文件布局排序的。并且希望在 pyTable 中保持相同的顺序(但不是必需的)。

谢谢

0 投票
6 回答
3404 浏览

python - 对于不是很大的文件,Pytables 与 CSV

我最近遇到了 Pytables,发现它非常酷。很明显,对于非常大的数据集,它们优于 csv 格式。我正在使用 python 运行一些模拟。输出不是那么大,比如 200 列和 2000 行。

如果有人对这两种方法都有经验,您能否建议从长远来看,对于此类不是很大的数据集,哪种格式更方便。Pytables 具有数据操作功能和使用 Vitables 浏览数据的功能,但浏览器没有可用于 CSV 的 Excel 等功能。同样,如果主要在 python 中工作,您是否发现其中一种在导入和导出数据方面比另一种更好?在文件组织方面更方便吗?对此类问题的任何评论都会有所帮助。

谢谢。

0 投票
2 回答
997 浏览

python - 存储“对象”

PyTables 是否支持存储 Python 对象?像这样的东西:

当然,尝试执行此操作时会出错...如何正确存储对象数组?有可能吗?谢谢

0 投票
3 回答
6205 浏览

python - HDF5:存储 NumPy 数据

当我使用 NumPy 时,我以原生格式 *.npy 存储它的数据。它非常快并且给了我一些好处,比如这个

  • 我可以从 C 代码中读取 *.npy 作为简单的二进制数据(我的意思是 *.npy 与 C 结构二进制兼容)

现在我正在处理 HDF5(此时 PyTables)。正如我在教程中所读到的,他们使用 NumPy 序列化程序来存储 NumPy 数据,所以我可以从 C 中读取这些数据,就像从简单的 *.npy 文件中一样?

HDF5 的 numpy 是否也与 C 结构二进制兼容?

更新:

我有 matlab 客户端从 hdf5 读取,但不想从 C++ 读取 hdf5,因为从 *.npy 读取二进制数据要快几倍,所以我真的需要从 C++ 读取 hdf5(二进制兼容性)所以我已经使用两种方式来传输数据 - *.npy(从 C++ 读取为字节,从 Python 本地读取)和 hdf5(从 Matlab 访问)如果可能的话,想使用唯一的一种方式 - hdf5,但要做到这一点我有找到一种方法使 hdf5 与 C++ 结构二进制兼容,请帮助,如果有某种方法可以关闭 hdf5 中的压缩或其他方式使 hdf5 与 C++ 结构二进制兼容 - 告诉我在哪里可以读到它...