Python+;自由pascal中的Numpy模
在免费的pascal中为Python开发模块(.pyd)相当容易,请参阅。但是如果我想与numpy接口,这并不是那么容易。 使用C与numpy接口时,必须向代码中添加Python+;自由pascal中的Numpy模,python,numpy,freepascal,delphi,Python,Numpy,Freepascal,Delphi,在免费的pascal中为Python开发模块(.pyd)相当容易,请参阅。但是如果我想与numpy接口,这并不是那么容易。 使用C与numpy接口时,必须向代码中添加#include,并调用import_array() 有没有办法在pascal中与numpy接口 EDIT1 如@wilberforce answer下的注释所述,头文件中定义的import_array函数只是将multiarray.pyd模块导入当前解释器并进行一些检查。它很容易翻译成帕斯卡,而且很有效 numpy C-API函数
#include
,并调用import_array()初始化函数中的代码>
有没有办法在pascal中与numpy接口
EDIT1
如@wilberforce answer下的注释所述,头文件中定义的import_array
函数只是将multiarray.pyd模块导入当前解释器并进行一些检查。它很容易翻译成帕斯卡,而且很有效
numpy C-API函数最初不在pythonXX.dll中,因此它们不能静态链接。与multiarray.pyd的静态或动态链接不适用于我
因此,最新的问题是:有没有一种方法可以从非C的代码中访问嵌入在multiarray.pyd中的C-API函数?从Pascal的角度来看,将numpy库与任何其他C库一样对待-您需要包含头并将import_array声明为一个外部
函数
包括细节
为了编写Python扩展模块,您已经需要完成其中的一些工作,以便Pascal代码可以使用Python API函数与Python对象交互。您可以在cdecl中看到这一点;体外PythonLib代码>链接到的示例中的修改器。可能您在执行此操作时不清楚。问题在于:(1)import\u array
在arrayobject.h
中声明,并且它包括,(2)在python dll中没有声明任何numpy函数,以及(3)对外部函数使用multiarray.pyd
不起作用。import\u array
映射到函数\u import\u array
,该函数本质上导入numpy模块。如果我用pascal重写这个函数,它可能会工作。哦,我明白了-他们在生成的头文件中定义了一个静态的导入数组-这太糟糕了!(虽然我相信他们有他们的理由。)看起来你必须用Pascal重新实现它——这应该是一个相当机械的翻译。您甚至可以将它作为头类型文件返回给numpy,生成的方式与刚刚发现的delphi的'delayed'关键字相同,它允许您根据需要从外部库(d2010+)加载函数。它可以在这种情况下工作。我只使用免费的pascal,所以在它实现之前。。。