我想在Python中实现图像分类算法。问题是python在循环数组时需要很长的时间。这就是为什么我决定写一个执行数组处理的Delphi dll。我的问题是,我不知道如何将多维python数组传递给我的dll函数。传递一个numpy数组到Delphi dll
德尔福DLL提取物:(我使用此功能仅用于测试)
type
TImgArray = array of array of Integer;
function count(a: TImgArray): Integer; cdecl;
begin
result:= high(a);
end;
相关Python代码:
arraydll = cdll.LoadLibrary("C:\\ArrayFunctions.dll")
c_int_p = ctypes.POINTER(ctypes.c_int32)
data = valBD.ReadAsArray()
data = data.astype(np.int32)
data_p = data.ctypes.data_as(c_int_p)
print arraydll.count(data_p)
由DLL函数返回值是不正确的(它是2816而不是 7339)。这就是为什么我想这有事端错了我的类型转换:( 由于提前, 马里奥
numpy数据将是一个值的单个数组。形状由其他元数据决定。试图将其直接映射到Delphi动态数组注定会失败。 我认为在你的位置,我会考虑使用Cython,它可以让你以自然的方式使用numpy数组。 – 2011-05-06 14:57:13
简而言之,我同意戴维的观点,那就是用C写出来。我在答案中对David的观点进行了扩展。 – 2011-05-07 23:54:08