我在共享C++库中使用Python调用方法。我有一个问题转换为一个函数输入的一个NUMPY 2D阵列到一个C++的2D数组。我有一个创造了一个玩具的例子,展示了这个问题。请随意编译并试用它!在
这是python代码(soexample.py)公司名称:
# Python imports
from ctypes import CDLL
import numpy as np
# Open shared CPP library:
cpplib=CDLL('./libsoexample.so')
cppobj = cpplib.CPPClass_py()
# Stuck on converting to short**?
array = np.array([[1,2,3],[1,2,3]])
cpplib.func_py(cppobj,array)
这里是C++库示例.cpp)公司名称:
^{pr2}$我用以下命令编译它:
g++ -fPIC -Wall -Wextra -shared -o libsoexample.so soexample.cpp
运行python文件时,会出现以下错误:
>> python soexample.py
Traceback (most recent call last):
File "soexample.py", line 13, in <module>
cpplib.func_py(cppobj,array)
ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: Don't know how to convert parameter 2
如何正确地纠正这个不幸的TypeError
?在
您可以使用}来帮助进行中间转换。下面的函数将一个numpy数组转换成一个C-type2darray,它可以被传递到一个需要
ctypes
的c_short
和{short **
的C函数中。在注意,我修改了
^{pr2}$func_py
和CPPClass::func
以获得2个额外的参数,即给定数组的宽度和长度。这样,CPPClass::func
可以打印出数组的所有元素:定义了该助手函数后,现在应该可以执行以下操作:
相关问题 更多 >
编程相关推荐