我正在尝试使用 ctypes 在 python3 中使用fann(用 C 编写的神经网络库)。到目前为止,这是我的删节代码:
from ctypes import *
cdll.LoadLibrary("/usr/local/lib/libdoublefann.dylib")
fann = CDLL("/usr/local/lib/libdoublefann.dylib")
# Call fann to create a neural network
nn = fann.fann_create_from_file(b'/Users/xxxxx/Code/fanncode/net/nnf_25_1339802027.net')
# this outputs 3909360
print(nn)
如果我尝试针对 nn 变量(现在应该是 fann 神经网络)调用 fann 库中的任何其他函数,我会得到Segmentation fault: 11
或AttributeError: 'int' object has no attribute 'getMSE'
(例如)。我认为我的问题是,根据 ctypes 文档,变量 nn 最终是一个 int,而函数 fann_create_from_file 的 fann 文档指出:
FANN_EXTERNAL struct fann *FANN_API fann_create_from_file(const char * configuration_file)
所以我想我需要声明:
class FANN_API(Structure):
<fields and things which I don't know what they should be>
然后做:
fann.fann_create_from_file.restype = FANN_API
我的问题是我找不到 struct FANN_API 应该是什么。fann.h 的第 130 行指出,仅#define FANN_API
此而已,没有定义或任何内容。
我对需要定义结构的猜测是否正确?如果是这样,那么我怎样才能找出它在 python 代码中声明的格式?如果没有,那么任何人都可以建议我可能需要做什么/阅读什么来让我的代码工作吗?
谢谢!