首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中生成QVector3D列表的快速方法

在python中生成QVector3D列表的快速方法
EN

Stack Overflow用户
提问于 2022-03-10 08:50:34
回答 1查看 114关注 0票数 0

我想使用Q3DSurface()类来绘制我的数据。在本例中,他们使用一个循环来生成数据并将其转换为QVector3D()对象的列表。

在我的例子中,数据作为numpy.ndarray()。如果我遵循这个示例,我必须遍历整个数组,并将每个元素转换为一个QVector3D()并将其保存在一个列表中。

是否有更有效的方法从numpy数组生成QVector3D()元素列表,我可以传递给QSurfaceDataProxy()对象?

在我的用例中,我希望在GUI中有一个实时视图。更新后的代码约为0.3s (data.shape=(400,400))。这对我的申请来说太过分了。

我尝试过numba,但它不识别QVector3D()类。

我解析数组的代码是:

代码语言:javascript
复制
#@jit(nopython=True)    
def update_data(data:np.ndarray):
    vector_list= [[0]*data.shape[1] for i in range(data.shape[0])]
    for y_index in range(data.shape[0]):
        for x_index in range(data.shape[1]):
            vector_list[y_index][x_index] = QVector3D(x_index, data[y_index,x_index], y_index)
    return vector_list
EN

回答 1

Stack Overflow用户

发布于 2022-03-10 12:16:54

这里:https://doc.qt.io/qt-5/qtdatavisualization-data-handling.html,上面写着

处理实时数据

当您拥有快速更新的数据集时,重要的是正确处理数据以确保良好的性能。由于内存分配是一项昂贵的操作,所以在可能的情况下始终使用QList::reserve()和QVector::resize(),以避免在构造给代理的数组时进行不必要的重新分配。如果您需要更改每个帧的整个数据集,那么在大多数情况下最好重用现有的数组--特别是如果数组的尺寸没有变化。如果需要为每个帧添加、插入、删除或更改多个行或项,则使用一个方法调用,而不是使用影响单个行或项目的多个调用,总是更有效。例如,使用单个QBarDataProxy::addRows()调用添加10行比十个单独的QBarDataProxy::addRow()调用更有效。

对条形渲染器进行了优化,使其仅访问数据窗口中的数据,因此即使不断向代理添加更多数据,也不应出现明显的减速。

由于分散数据的未排序性质,数据窗口范围中的任何更改都需要检查所有数据点的可见性,如果数据不断地添加到代理中,则会导致增长放缓。为了获得最佳的散点图性能,只需将所需的数据保存在代理中。

表面数据(在项级上类似于分散数据)已经被分配到行和列中,因此曲面渲染器可以通过假设行和列中的数据沿其各自的轴进行排序来优化绘图。它的效率不如酒吧案件,但几乎如此。

您是一次使用多行还是一个接一个地使用?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71421233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档