私は共有のC++ライブラリのメソッドを呼び出すためにpythonを使用しています。私はnumpyの2D配列を関数入力としてshortのC++ 2D配列に変換する際に問題が発生しています。私は問題を呈する玩具の例を作りました。コンパイルして試してみてください!私は次のコマンドを使用してコンパイル2D numpy配列をC++ short **に変換しますか?
#include <iostream>
using namespace std;
class CPPClass
{
public:
CPPClass(){}
void func(unsigned short **array)
{
cout << array[0][0] << endl;
}
};
// For use with python:
extern "C" {
CPPClass* CPPClass_py(){ return new CPPClass(); }
void func_py(CPPClass* myClass, unsigned short **array)
{
myClass->func(array);
}
}
:
ここ# 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++ライブラリ(soexample.cpp)である:ここ
は、Pythonコード(soexample.py)であります
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
?
私はCの短いint型は16ビットであると信じています。一方、デフォルトのnumpy intは、通常32ビットです。配列を 'array = np.array([[1,2,3]、[1,2,3]]、dtype = np.uint16)'として作成し、何が起こるかを見ることができます。 – Jaime