यह पायथन प्रश्न है। मैं एक चर एकपायथन में, SWIG द्वारा लिपटे uint16 [3] सरणी का उपयोग कैसे करें (यानी एक PySwigObject अनचाहे)?
>>> A
<Swig Object of type 'uint16_t *' at 0x8c66fa0>
>>> help(A)
class PySwigObject(object)
Swig object carries a C/C++ instance pointer
उदाहरण एक के द्वारा संदर्भित uint16 एक सन्निहित सरणी है [3] और समस्या अजगर से कि सरणी में पहुँच प्राप्त करने के लिए है।
पायथन में, मैं लम्बाई 3 का एक चर बी कैसे बना सकता हूं, जो मुझे ए में लिपटे सूचक द्वारा इंगित उसी स्मृति में पढ़ने/लिखने की सुविधा देता है?
मुझे लगता है कि समस्या के दो भाग हैं:
- कैसे ए से बाहर सूचक प्राप्त करने के लिए (मैं एक बड़ा घूँट वस्तु, नहीं लिपटे वस्तु को 0x8c66fa0 अंक लगता है)।
- मेमोरी पॉइंटर और ज्ञात डेटा प्रकार का उपयोग करके किसी प्रकार की पायथन सरणी को कैसे प्रारंभ करें। (Numpy एक सेबबफर विधि है, लेकिन क्या एक जरूरी चीज की जरूरत है।) शायद कुछ कास्टिंग की आवश्यकता होगी।
यह आसान मुझे लगता है कि होना चाहिए, लेकिन मैं पढ़ रहा था और एक से अधिक दिन के लिए हैकिंग!
दूसरे भाग को हल करने के लिए, मुझे लगता है कि एक उदाहरण इस तरह से शुरू हो सकता है:
>>> import numpy
>>> C = numpy.ascontiguousarray([5,6,7],"uint16")
>>> C
array([5, 6, 7], dtype=uint16)
>>> C.data
<read-write buffer for 0x8cd9340, size 6, offset 0 at 0x8902f00>
फिर "0x8902f00" और "uint16" और परीक्षण का उपयोग करता है, तो बी को बदलने (जो वेक्टर प्रकार के) बी बनाने की कोशिश [2] सी [2] में परिवर्तन का कारण बनता है।
आपके सुझावों या स्पष्ट उदाहरण के लिए बहुत धन्यवाद।
1. The wrapped pointer in PySwigObject A is available as A.__long__() . 2. A raw pointer can be cast into an indexable type using ctypes as follows import ctypes pA = ctypes.cast(A.__long__(), ctypes.POINTER(ctypes.c_uint16))
फिर तत्वों पीए [0], पीए [के रूप में संबोधित किया जा सकता:
सादर,
ओवेन