【发布时间】:2014-09-27 03:47:22
【问题描述】:
我正在处理一个需要处理自定义 C 结构矩阵的项目,其中一些 C 函数在这些结构上实现操作。
到目前为止,我们的工作如下:
- 使用 ctypes 围绕 C 结构构建 python 包装类
- 覆盖
__and__和__xor__以调用适当的底层 C 函数的对象 - 构建包含这些类实例的
numpy数组
现在我们面临一些性能问题,我觉得这不是处理这个问题的正确方法,因为我们有一个 C 库在数据类型上实现本机昂贵的操作,然后 numpy 在矩阵上实现本机昂贵的操作,但是(我猜)在这种配置中,每个操作都将由 python 包装类代理。
有没有办法用 numpy 实现这一点,使操作完全原生?我读过有用于将 ctypes 类型包装到 numpy 数组中的实用程序(seehere),但是运算符重载呢?
我们不一定要使用 ctypes,但我们希望仍然能够使用 python(我相信它在代码可维护性方面比 C 有很大的优势......)
有谁知道这是否可行,以及如何实现?您会建议其他不同的解决方案吗?
非常感谢!
【问题讨论】:
-
是的,我建议另一种解决方案。 numpy 并没有真正设计为在这种使用下高效。这真的取决于你想做什么,所以也许你可以详细说明一下;但总的来说,“数组结构”方法比“结构数组”方法更友好。请注意,您可以通过适当地偏移您的结构/跨步您的数组来互换使用这两种方法。
标签: python numpy ctypes cython