37,720
社区成员
发帖
与我相关
我的任务
分享
from ctypes import *
import numpy
def Convert1DToCArray(TYPE, ary):
arow = TYPE(*ary.tolist())
return arow
def Convert2DToCArray(ary):
ROW = c_int * len(ary[0])
rows = []
for i in range(len(ary)):
rows.append(Convert1DToCArray(ROW, ary[i]))
MATRIX = ROW * len(ary)
return MATRIX(*rows)
a=numpy.array([[1,2,2],[1,3,4]])
caa = Convert2DToCArray(a)
def ShowCArrayArray(caa):
for row in caa:
for col in row:
print col,
print
print caa
ShowCArrayArray(caa)
#! /bin/sh
cat > mystuff.c << _EOF
void show_matrix(int *matrix, int rows, int columns)
{
int i, j;
for (i=0; i<rows; i++) {
for (j=0; j<columns; j++) {
printf("matrix[%d][%d] = %d\n", i, j, matrix[i*rows + j]);
}
}
}
_EOF
gcc -shared -O2 mystuff.c -ldl -o mystuff.so
cat > test.py << _EOF
import ctypes
import numpy as np
lib = ctypes.cdll.LoadLibrary("./mystuff.so")
arr = np.zeros((3,5))
#arr = np.array([[1,2],[3,4]])
tmp = np.asarray(arr)
rows, cols = tmp.shape
dataptr = tmp.ctypes.data_as(ctypes.c_char_p)
lib.show_matrix(dataptr, rows, cols)
_EOF
python test.py