ขั้นตอนแรก
สร้าง code ภาษา C สมมุติว่าบันทึกและตั้งชื่อว่า copy_array.c
ขั้นตอนที่สอง
เปลี่ยน c code เป็น Shared Library
ขั้นตอนที่สาม
เป็นเรียกใช้ Shared library ในภาษา Python ด้วย ctypes
ctypes คือ foreign function library เป็น Standard library (ติดตั้งมากับ Python Interpreter แล้ว) ที่ช่วยอำนวยความสะดวกในการเรียกใช้หรือส่งค่าตัวแปรระหว่าง Python กับ DLL (Windows) หรือ Shared Library (Linux)
เริ่มด้วยการ load ตัว shared library เข้ามาใน Python และกำหนดตัวแปรอ้างอิง เนื่องจาก Python เป็น OOP การเข้าถึง function ที่อยู่ภายใต้ Shared library จะใช้รูปแบบเดียวกับการใช้งาน Object ทั่วไป
ข้ามไปดูคำสั่ง
สร้าง code ภาษา C สมมุติว่าบันทึกและตั้งชื่อว่า copy_array.c
#include <stdio.h>
void copy_array(unsigned int* arr2d, int rows,int cols){
unsigned int arr[rows][cols];
for (int r=0;r < rows;r++){
for(int c=0;c < cols;c++){
int inx = 2*r+c;
arr[r][c] = arr2d[inx] ;
printf("%d ", arr[r][c]);
}
printf("\n");
}
printf("\n");
}
ขั้นตอนที่สอง
เปลี่ยน c code เป็น Shared Library
g++ -c copy_array.c -o copy_array.o
จะได้ผลออกมาเป็น object file ชื่อ copy_array.o ต่อไปก็ทำการเปลี่ยนให้เป็น Shared library file
g++ -share copy_array.o -o copy_array.so
จะได้ผลออกมาเป็น Shared library file ชื่อ copy_array.so ขั้นตอนที่สาม
เป็นเรียกใช้ Shared library ในภาษา Python ด้วย ctypes
import numpy as np
import ctypes
lib = ctypes.cdll.LoadLibrary("./copy_array.so")
a = np.array([[10,20,12,4,5,1]])
aptr = a.ctypes.data_as(ctypes.POINTER(ctypes.c_int))
lib.copy_array(aptr,3,2)
print(a)
ctypes คือ foreign function library เป็น Standard library (ติดตั้งมากับ Python Interpreter แล้ว) ที่ช่วยอำนวยความสะดวกในการเรียกใช้หรือส่งค่าตัวแปรระหว่าง Python กับ DLL (Windows) หรือ Shared Library (Linux)
เริ่มด้วยการ load ตัว shared library เข้ามาใน Python และกำหนดตัวแปรอ้างอิง เนื่องจาก Python เป็น OOP การเข้าถึง function ที่อยู่ภายใต้ Shared library จะใช้รูปแบบเดียวกับการใช้งาน Object ทั่วไป
lib = ctypes.cdll.LoadLibrary("./copy_array.so")
ข้ามไปดูคำสั่ง
aptr = a.ctypes.data_as(ctypes.POINTER(ctypes.c_int))
ชุดคำสั่งนี้เป็นการนำค่า pointer ที่ชี้ไปยัง address ของตัวแปร "a" ที่ถูกสร้างไว้เป็น numpy array ของ integer เนื่องจากทางด้านภาษา C จะรับค่าเป็น pointer
lib.copy_array(aptr,3,2)
และในชุดคำสั่งนี้เป็นการเรียกใช้งาน function พร้อมกับส่ง parameters ไปให้ทำการประมวลผล
ความคิดเห็น
แสดงความคิดเห็น