如何使用c_double_Array添加/减去?

时间:2015-09-16 20:20:45

标签: python ctypes

我正在使用ctypes与用C编写的DLL接口,我创建了一个数组:

foo = (c_double * 1000)()
bar = (c_double * 1000)()

我可以使用foo[:]获取所有值,类型为:

type(foo)
c_double_array_1000

但是我不能用bar减去foo:

unsupported operand type(s) for -: 'c_double_Array_1000' and 'c_double_Array_1000'

我错过了什么?

2 个答案:

答案 0 :(得分:0)

import ctypes
foo = (ctypes.c_double * 3)(14, 22, 37)
bar = (ctypes.c_double * 3)(0, 1, 2)
diff = [foo[i]-bar[i] for i in range(len(foo))]
print diff

答案 1 :(得分:0)

正如您提到的nowox,避免循环的一种方法是使用numpy

试试这个:

import ctypes
import numpy as np
a = (ctypes.c_int * 10)(1,2,3,4,5,6,7,8,9,0)
b = (ctypes.c_int * 10)(5,0,5,0,5,0,5,0,5,0)

x = np.array(a)
y = np.array(b)

x - y

会给你:

array([ 4, -2,  2, -4,  0, -6, -2, -8, -4,  0])

但是,如果您不想像NendoTaka那样处理模块。您需要使用循环并且Prune答案是正确的。