python向c语⾔程序传递数组作为参数
python的for循环效率极低,计算速度也慢,⽐c/c++就慢多了,就a[i]+a[i+1]*256这个公式循环3万词都得接近700ms,不会其他办法,只有放在c⾥计算然后返回结果了
下⾯的代码给个10个值的demo。(博主遇到的问题⽤了其他⽅法解决)
c语⾔中代码,编译成Ctype.dll了
float *trans_image_test(int raw_data[])
{
static float image_8bit[10];
for (int j = 0; j<10; j = j + 2)
{
image_8bit[j / 2] = (float)(raw_data[j] + raw_data[j + 1]) / 2;
}
return image_8bit;
}
从上⾯看,需要给这个函数传递⼀个整型数组,然后这个函数回返回⼀个指向float数组的指针
python端调⽤
FX = ctypes.cdll.LoadLibrary
lib_ctype = FX("./aaaa/Ctype.dll")
#这部分是导⼊动态库
···
编程先学c语言还是pythonArry = ctypes.c_int * 10
raw_data = Arry(0,1,2,3,4,5,6,7,8,9)#--------###------------flag----###---------------#
ans_stype = POINTER(c_float) # 修改类型
out = list(ans_image_test(raw_data)[0:10]) # 调⽤并使⽤列表取值
#out = np.array(ans_image_test(raw_data)[0:10]) # 调⽤并使⽤数组取值,都是ok的
print(out[0:10])
输出
[0.5, 2.5, 4.5, 6.5, 8.5, 0.0, 0.0, 0.0, 0.0, 0.0]
⽬前的问题
上⾯加#—flag—#的那句,⽬前来说,只能⼀个⼀个的添加值(⼤数组不知道有没有其他办法,我想到的是可以使⽤字符串或者结构体,但是还没尝试),不可以直接放数组,列表等。⽬前⽆解。有办法的来教我做事
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论