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—#的那句,目前来说,只能一个一个的添加值(大数组不知道有没有其他办法,我想到的是可以使用字符串或者结构体,但是还没尝试),不可以直接放数组,列表等。目前无解。有办法的来教我做事