Python和C++之间分享大量数据的最有效方式是什么?

3
我正在编写一个系统,允许在C++应用程序中执行Python脚本。
这些Python脚本用于修改数据数组中的值(通常是2048x2048x4个浮点数数组)。
我目前正在使用使用数组API创建的numpy数组,并在Python中注册。
在Python脚本中,我像这样访问数组:
for all x in range(0,Width):
    for all y in range(0,Height)
        Array[x][y][0] = blah
        Array[x][y][1] = blah
        Array[x][y][2] = blah
        Array[x][y][3] = blah

这似乎很慢。有更快的设置方法吗?
3个回答

1

你可能会想要看一下Boost.Python。它专注于使C ++代码在Python中可用,但也提供exec和eval函数,这应该允许您有效地与python代码交互。


1

我本来想建议使用numpy,但你已经在用了。恐怕只能通过领域特定的更改来减少工作量。正如John Montgomery所提到的,你需要找出Python代码中花费时间的原因,并确定是否可以避免其中一些。

Python中正在进行的工作有什么模式吗?也许你可以提供领域特定的辅助函数(用C编写),可以从Python代码中调用。


0
你应该尝试一次性设置数组中的多个值,而不是分成四步(或更多步骤)来进行。
我相信省略号语法在这里可能会有用: 你如何在Python中使用省略号切片语法? 或者像这样: Array[x,y,:]=blah 或者 Array[x,y,:]=blah1,blah2,blah3,blah4 如果每个元素有不同的值。
这是基于你的代码瓶颈是由你所做的赋值数量引起的假设。最好进行一些性能分析,以确定具体是什么导致速度变慢。尝试相同的代码,但不实际存储结果,看看是否更快。如果没有,那么问题可能不在于赋值本身的速度...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接