외부 프로그램을 사용하여 C++로 작성된 행렬을 파이썬과 인터페이스하는 경우는 boost::python
입니다. 이 C 배열을 numpy에 전달하고 싶습니다. 작성자에 따르면이 기능은 numpy의 obj.__array_interface__
으로 이미 구현되어 있습니다. 내가 파이썬 스크립트에서이 전화 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++과 파이썬을 혼합하는 것에 매우 새로운 것입니다. 이것이 의미가 없거나 어떤 부분에 대해 자세히 설명해야 할 필요가 있다면 알려주세요!
'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'는 실제로'공유 객체 (shared object) '이고 그것을 조작하기위한 이해가 부족합니다. – Daniel
ugly하지만 X .__ array_interface__ = X .__ array_interface __()를 할당하는 방법은 무엇입니까? 이것이 실패하면 C++을 탐구하고 그면에 질의없는 배열을 만들어야 할 것입니다. –