मैं एक साथ गोंद करने पायथन के लिए कुछ सी ++ कोड (2.6) बड़ा घूँट उपयोग कर रहा हूँ Numpy सरणी के लिए वेक्टर, और कहा कि गोंद का हिस्सा की फास्ट रूपांतरण कोड का एक टुकड़ा है कि डेटा (मूल्यों के लाखों लोगों की बड़ी क्षेत्रों धर्मान्तरित शामिल) सी ++ तरफ से एक गूढ़ सरणी तक। सबसे अच्छा तरीका मैं औजार के साथ वर्ग के लिए पुनरावर्तक आ सकते हैं और फिर एक अजगर तरीका प्रदान करता है:C/C++
def __array__(self, dtype=float):
return np.fromiter(self, dtype, self.size())
समस्या यह है कि प्रत्येक इटरेटर next
कॉल बहुत महंगा है, क्योंकि इसके बारे में तीन या चार के माध्यम से जाना है SWIG रैपर। यह बहुत लंबा लगता है। मैं गारंटी दे सकता हूं कि सी ++ डेटा संगत रूप से संग्रहीत किया जाता है (चूंकि वे एक std :: वेक्टर में रहते हैं), और ऐसा लगता है कि Numpy उस डेटा की शुरुआत में उस पॉइंटर को उस मूल्य की संख्या के साथ लेने में सक्षम होना चाहिए, जिसमें उसके मूल्य शामिल हैं, और इसे सीधे पढ़ें।
क्या internal_data_[0]
पर पॉइंटर पास करने का कोई तरीका है और internal_data_.size()
मूल्य को numpy करने के लिए कोई तरीका है ताकि वह सीधे पाइथन ओवरहेड के बिना डेटा को एक्सेस या कॉपी कर सके?
क्या आप व्यावहारिक कार्यान्वयन के लिए थोड़ा और विवरण प्रदान कर सकते हैं? क्या मेरे प्रोजेक्ट को नम्पी हेडर फाइलों के विरुद्ध संकलित किए बिना ऐसा करने का कोई तरीका है? धन्यवाद। –
यह भी कहता है कि यह एक विरासत इंटरफ़ेस है। –
'__array_interface__' इसके अंदर सादे प्रकार के साथ सिर्फ एक सादा निर्देश है। किसी भी बेवकूफ हेडर के साथ संकलन करने की कोई ज़रूरत नहीं है। उस नोट को अनदेखा करें जो इसे "विरासत" कहता है। मैंने सोचा कि मैंने पहले ही इसे हटा दिया है। यदि आप चाहें, तो आप पीईपी 3118 बफर इंटरफ़ेस को कार्यान्वित कर सकते हैं, लेकिन यह आसान है। –