为了防止在Boost.Python中进行复制,可以执行以下任一操作:
>使用政策至return internal references
>在免费商店中分配并使用策略来安装Python manage the object
>分配Python对象,然后extract对C中的数组的引用
>使用智能指针在C和Python之间共享所有权
如果矩阵具有C样式的连续内存布局,请考虑使用Numpy C-API. PyArray_SimpleNewFromData()函数可用于创建ndarray对象,该对象包装已在其他位置分配的内存.这将使人们可以将数据公开给Python,而无需在语言之间复制或转移每个元素. how to extend documentation是用于处理Numpy C-API的重要资源:
Sometimes, you want to wrap memory allocated elsewhere into an ndarray object for downstream use. This routine makes it straightforward to do that. […] A new reference to an ndarray is returned, but the ndarray will not own its data. When this ndarray is deallocated, the pointer will not be freed.
[…]
If you want the memory to be freed as soon as the ndarray is deallocated then simply set the OWNDATA flag on the returned ndarray.
同样,虽然绘图功能可以创建数组的副本,但它可以在C-API内执行此操作,从而可以利用内存布局.
如果需要考虑性能,则可能需要考虑绘图本身:
>取数据样本并作图可能就足够了,具体取决于数据分布
>使用基于栅格的后端(例如Agg)通常会在大型数据集上执行基于矢量的后端
>对其他针对大数据设计的工具进行基准测试,例如Vispy