Tôi có thể chuyển mảng một chiều tới python như dưới đây. và tôi tự hỏi nếu tôi có thể vượt qua c + + mảng con trỏ đôi để python bằng cách sử dụng ctypes, numpy.truyền con trỏ kép C++ tới python
test.cpp:
#include <stdio.h>
extern "C" void cfun(const void * indatav, int rowcount, int colcount, void * outdatav);
void cfun(const void * indatav, int rowcount, int colcount, void * outdatav) {
//void cfun(const double * indata, int rowcount, int colcount, double * outdata) {
const double * indata = (double *) indatav;
double * outdata = (double *) outdatav;
int i;
puts("Here we go!");
for (i = 0; i < rowcount * colcount; ++i) {
outdata[i] = indata[i] * 4;
}
puts("Done!");
}
test.py:
import numpy
import ctypes
indata = numpy.ones((5,6), dtype=numpy.double)
outdata = numpy.zeros((5,6), dtype=numpy.double)
lib = ctypes.cdll.LoadLibrary('./ctest.so')
fun = lib.cfun
# Here comes the fool part.
#fun(ctypes.c_void_p(indata.ctypes.data), ctypes.c_void_p(outdata.ctypes.data))
fun(ctypes.c_void_p(indata.ctypes.data), ctypes.c_int(5), ctypes.c_int(6),
ctypes.c_void_p(outdata.ctypes.data))
print 'indata: %s' % indata
print 'outdata: %s' % outdata
Đây là một hack tôi đã được dạy, nhưng tại sao không chỉ vượt qua các con trỏ số nguyên dài? –
vì loại có thể gấp đôi .. vv không chỉ số nguyên. – wonjun
Các con trỏ luôn có thể được biểu diễn dưới dạng số nguyên dài. và sau đó quay trở lại bất kỳ loại nào bạn muốn. –