在循环大矩阵时,Python的效率非常低,这时候我们可以选择用C语言进行运算,生成动态链接库,使用Python的ctypes进行调用,提高运算效率。本文以循环输出二维数组为例进行展示。
思路:将二维矩阵转化为一维矩阵输入
C语言代码
#include <stdio.h>
void Print(int *array,int row,int col){
for (int i=0;i<row;i++){
for (int j=0;j<col;j++){
int idx = i * row + j;
printf("%d\n",array[ids]);
}
}
}
将C语言进行编译
gcc -c test.c
gcc -shared -o test.dll test.o
Python代码
import ctypes as cp
def Print(array):
# array是二维矩阵,np.array([1,2,3][4,5,6])
dll=cp.cdll.LoadLibrary(r'*\test.dll')
Print=dll.Print
# 设置输入输出参数格式
Print.argtypes=[np.ctypeslib.ndpointer(cp.c_int8,2,(2,3))]
Print.restypes=cp.c_int8
Print(array)