我刚刚发现了HDF5格式,我正在考虑使用它来存储分布在Java应用服务器集群上的3D数据.我发现有几种可用于Java的实现,并想知道它们之间的差异:
Java HD5接口(JHI5)来自HDF组本身的Java包装器.
Nujan:纯Java NetCDF4和HDF5编写器(无法读取HDF5)
最重要的是,我想知道:
涵盖了多少本机API,本机API中不存在的任何限制?
如果支持"Parallel HDF5"?
加载3D数据后,每次访问3D阵列中的一个元素时,是否会获得"本机调用开销"?也就是说,数据实际上是变成了Java对象,还是留在"native/JNI memory"中?
是否知道特定实现的稳定性问题,因为本机代码崩溃通常会导致整个JVM崩溃?
想知道是否有一种简单的方法可以使用h5py检查HDF5文件中是否存在节点.
我在文档中找不到任何内容,所以现在我正在使用异常,这很难看.
# check if node exists
# first assume it exists
e = True
try:
h5File["/some/path"]
except KeyError:
e = False # now we know it doesn't
Run Code Online (Sandbox Code Playgroud)
添加上下文:在尝试创建具有相同名称的新节点之前,我使用它来确定节点是否存在.
如何在运行时从QObject中检测它所链接的Qt是否是调试版本或发布版本?
我知道QT_NO_DEBUG宏,但是在Qt的构建时解决了这个问题.
示例1何时有用:我有一个插件充当崩溃处理程序,提供回溯.如果qt调试符号可用,我只希望这个插件尝试完成所有这些工作.
示例2:我有一个用pyqt编写的命令行参数解析器.它想要打印程序帮助.如何从pyqt中找出QApplication是否支持-sync开关.如果我有关于构建类型的信息,我可以从程序理解的参数列表中轻松添加或删除-sync.
我正在写一个新的PyQt应用程序.我正在尝试使用尽可能多的PyQt API来完成与程序和ui相关的所有操作,以此来提高我对PyQt和Qt的了解.
我的问题是,PyQt/Qt中是否有一个API来优雅地处理命令行参数解析?
到目前为止我的研究已经出现:
那么PyQt应用程序通常如何处理呢?或者是opt_parser/argparse的方式去?
这远不是一个很好的解决方案......
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, argparse
from PyQt4 import QtGui
def main(argv):
app = QtGui.QApplication(argv) # QApplication eats argv in constructor
# We can get a QStringList out of QApplication of those arguments it
# didn't decide were reserved by Qt.
argv2 = app.arguments()
# now we need to turn them back into something that optparse/argparse
# can understand, since a QStringList is …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的数组,类似于格式的高程数据:
triplets = ((x0, y0, z0),
(x1, y1, z1),
... ,
(xn, yn, zn))
Run Code Online (Sandbox Code Playgroud)
其中 x, y, z 都是以米为单位的浮点数。您可以创建与此格式匹配的合适测试数据:
x = np.arange(20, 40, dtype=np.float64)
y = np.arange(30, 50, dtype=np.float64)
z = np.random.random(20) * 25.0
triplets = np.hstack((x, y, z)).reshape((len(x),3))
Run Code Online (Sandbox Code Playgroud)
我希望能够有效地找到给定 (x,y) 对的相应 z 值。到目前为止,我的研究引出了更多问题。这是我所拥有的:
遍历所有三元组:
query = (a, b) # where a, b are the x and y coordinates we're looking for
for i in triplets:
if i[0] == query[0] and i[1] == query[1]:
result = i[2]
Run Code Online (Sandbox Code Playgroud)
缺点:慢;a, b …
前提:
我已经创建了一个主窗口。下拉菜单之一有一个“ProcessData”项。当它被选中时,我创建了一个 QProgressDialog。然后我在主循环中做很多处理并定期更新 QProgressDialog 中的标签和百分比。
我的处理看起来像:从文件(numpy memmapped array)中读取大量数据,做一些信号处理,将输出写入一个普通的 h5py 文件。我遍历可用的输入文件,并将所有输出存储在一个通用的 h5py hdf5 文件中。每个输入文件的整个过程大约需要两分钟,并将一个 CPU 固定到 100%。
目标:
我如何使这个过程无阻塞,以便 UI 仍然响应?我仍然希望我的处理函数能够更新 QProgressDialog 及其相关标签。
我可以扩展它以同时处理多个数据集并保留更新进度条信息的能力吗?
我可以从多个线程/进程/等写入 h5py 吗?我是否必须对写操作实施锁定?
软件版本:
我使用 python 3.3+ 和 numpy/scipy/etc。UI 在 PyQt4 4.11/Qt 4.8 中,尽管我对使用 python 3.4(因此是 asyncio)或 PyQt5 的解决方案感兴趣。