私はC++で書かれた行列を計算するために外部プログラムを使い、Pythonとのインターフェイスはboost::python
です。このC配列をnumpyに渡したいと思います。作者によると、この機能はnumpyのobj.__array_interface__
で既に実装されています。私は、次を得るPythonスクリプトでこれを呼び出し、X
にC++オブジェクトを割り当てた場合:Numpyの__array_interface__がdictを返さない
print X
#<sprint.Matrix object at 0x107c5c320>
print X.__array_interface__
#<bound method Matrix.__array_interface__ of <sprint.Matrix object at 0x107c5c320>>
print X.__array_interface__()
#{'shape': (5, 5), 'data': (4416696960, True), 'typestr': '<f8'}
print np.array(X)
#Traceback (most recent call last):
# File "<string>", line 96, in <module>
#ValueError: Invalid __array_interface__ value, must be a dict
私の限られた理解から、私はこの問題はX.__array_interface__
実際()
なしでは何も返していないと考えています。これらの引数を明示的にnp.array
に渡す方法、またはこの問題の回避策がありますか?
私は実際にはC++とPythonを混在させたことが新しくなりました。これが意味をなさない場合や、私が何かを解説する必要がある場合は私に教えてください!
'np.array'は辞書を必要としています。 'X .__ array_interface __()'は辞書を返します。それで 'np.array(X .__ array_interface __())'はしないでしょうか? – greatwolf
それは私の初期の考えでもありましたが、 'np.array'は' __array_interface__'の辞書を持つオブジェクトを望んでいます。 'http://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html '。だから 'np.array(X .__ array_interface __())'は辞書を返すだけです。残念ながら 'np.array'は実際には'共有オブジェクト 'です。私はそれを操作するための理解がありません。 – Daniel
醜いですが、X .__ array_interface__ = X .__ array_interface __()を割り当てるのはどうですか?これが失敗した場合は、C++を掘り下げて、その側に数が少ない配列を作成する必要があります。 –