什么是在Python和C ++之间共享大量数据的最有效方法

时间:2009-01-18 10:30:47

标签: c++ python optimization

我正在编写一个允许在C ++应用程序中执行python脚本的系统。

python脚本用于修改数据数组中的值(通常为2048x2048x4浮点数组)

我目前正在使用使用数组API创建并在Python中注册的numpy数组。

在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 个答案:

答案 0 :(得分:1)

您可能需要查看Boost.Python。它侧重于在Python中提供C ++代码,但它还提供了exec and eval functions,它允许您有效地与python代码交互。

答案 1 :(得分:1)

我以为我会建议numpy,但你已经在使用它了。我担心会留下特定于域的更改来减少工作量。正如John Montgomery所提到的,你需要弄清楚Python代码中花费的时间,并确定你是否可以避免使用它。

Python中的工作是否有模式?也许你可以提供可以从Python代码调用的特定于域的辅助函数(用C编写)。

答案 2 :(得分:0)

您应该看看是否可以在一个步骤中而不是在四个(或更多)步骤中设置数组中的多个值。

我相信省略号语法在这里可能很有用:

How do you use the ellipsis slicing syntax in Python?

或者类似的东西:

Array[x,y,:]=blah

Array[x,y,:]=blah1,blah2,blah3,blah4

如果每个元素都有不同的值。

这假设您代码中的瓶颈是由于您正在执行的分配数量。可能值得进行一些分析以确切地了解什么是缓慢的。尝试使用相同的代码,但不实际存储结果以查看它是否更快。如果不是那么它可能不是那么缓慢的任务......