मैं सी ++ में लिखे गए मैट्रिक्स की गणना करने के लिए बाहरी प्रोग्राम का उपयोग कर रहा हूं और boost::python
के माध्यम से पाइथन के साथ इंटरफेस किया गया है। मैं इस सी सरणी को numpy पर पास करना चाहता हूं, और लेखकों के मुताबिक यह क्षमता पहले से ही numpy के obj.__array_interface__
के साथ लागू की गई है। अगर मैं एक अजगर स्क्रिप्ट में इस फोन और X
लिए सी ++ वस्तु आवंटित मैं निम्नलिखित प्राप्त:Numpy's __array_interface__ वापस नहीं लौटा
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
पर स्पष्ट रूप से या इस समस्या के लिए एक समाधान करने का कोई तरीका है।
मैं सी ++ और पायथन मिश्रण करने के लिए वास्तव में काफी नया हूं, अगर इसका कोई मतलब नहीं है या मुझे किसी भी हिस्से पर विस्तार करने की आवश्यकता है तो मुझे बताएं!
'np.array' एक शब्दकोश चाहता है। ऐसा लगता है कि 'एक्स .__ array_interface __()' एक शब्दकोश देता है। तो 'np.array नहीं होगा (एक्स .__ 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
बदसूरत लेकिन एक्स .__ array_interface__ = X .__ array_interface __() असाइन करने के बारे में कैसे? यदि यह विफल हो जाता है तो आपको सी ++ में प्रवेश करना पड़ सकता है और उस तरफ एक numpy सरणी बनाना पड़ सकता है। –