gpt4 book ai didi

Python ctypes 组合两个 c_double 数组

转载 作者:行者123 更新时间:2023-12-01 09:22:48 32 4
gpt4 key购买 nike

我有一个 Python 程序,需要将一个数组传递给一个需要 c double 组的 .dll。目前这是通过以下代码完成的,这是我能找到的最快的转换方法:

from array import array
from ctypes import *
import numpy as np

python_array = np.array(some_python_array)
temp = array('d', python_array.astype('float'))
c_double_array = (c_double * len(temp)).from_buffer(temp)

...其中“np.array”只是表明在我的例子中 python_array 是一个 numpy 数组。假设我现在有两个 c_double 数组:c_double_array_ac_double_array_b,我遇到的问题是我想将 c_double_array_b 附加到 c_double_array_a 无需重新转换为/从 python 通常用于数组的任何内容。有没有办法用 ctypes 库来做到这一点?

我一直在阅读文档 here但似乎没有详细说明创建后组合两个 c_type 数组。在我的程序中,它们可以在创建后组合起来,这一点非常重要,当然,只需将 python_array_b 附加到 python_array_a 然后再组合起来就很简单了转换,但这对我来说不起作用。

谢谢!

附注如果有人知道一种加速转换代码的方法,我们也会非常感激,它需要大约 150 毫秒/数组中的百万个元素,而我的程序通常一次处理 1-1000 万个元素。

最佳答案

抛开 ctypes 数组的构造(Mark's comment 肯定与之相关),问题是 C 数组不可调整大小:您无法追加扩展它们。 (确实存在 wrappers 提供这些功能,这可能是构建此功能的有用引用。)您可以做的是创建一个与两个现有数组大小相同的新数组,然后 ctypes.memmove 将它们放入其中。使用realloc也许可以提高性能,但您必须比正常的ctypes内存管理更低才能使用它。

关于Python ctypes 组合两个 c_double 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50687450/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com