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")
	#这部分是导入动态库
	···
	Arry = ctypes.c_int * 10
	raw_data = Arry(0,1,2,3,4,5,6,7,8,9)#--------###------------flag----###---------------#

	lib_ctype.trans_image_test.restype = POINTER(c_float) # 修改类型
	out = list(lib_ctype.trans_image_test(raw_data)[0:10]) # 调用并使用列表取值
	#out = np.array(lib_ctype.trans_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—#的那句,目前来说,只能一个一个的添加值(大数组不知道有没有其他办法,我想到的是可以使用字符串或者结构体,但是还没尝试),不可以直接放数组,列表等。目前无解。有办法的来教我做事

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值