मेमोरी में numpy arrays कैसे लगाए गए हैं, यह समझना कि मैं numpy का उपयोग करके पायथन में ओपनजीएल बनावट का उपयोग करने का प्रयास कर रहा हूं, लेकिन मैं समस्याओं में भाग रहा हूं क्योंकि मैं भविष्यवाणी नहीं कर सकता कि स्मृति में numpy arrays कैसे व्यवस्थित किया जाएगा। नीचे दिए गए उदाहरण कार्यक्रम (जो चलाना चाहिए के रूप में है) मेरे भ्रम की स्थिति दिखाता है:मेमोरी
from pylab import *
array_by_hand = array(
[[[1, 2, 3, 4], [1, 2, 3, 4]],
[[1, 2, 3, 4], [1, 2, 3, 4]]], dtype='uint8')
layers = 1 * ones((2, 2)), 2 * ones((2, 2)), 3 * ones((2, 2)), 4 * ones((2, 2))
array_from_layers = dstack(layers)
array_from_layers = array_from_layers.astype('uint8')
print array_by_hand; print
print array_from_layers; print
print ' '.join(x.encode('hex') for x in array_by_hand.data)
print ' '.join(x.encode('hex') for x in array_from_layers.data)
print
print all(array_by_hand == array_from_layers) # True
print str(array_by_hand.data) == str(array_from_layers.data) # False
हालांकि दो सरणियों जहाँ तक अजगर का संबंध है के बराबर हैं, का स्मृति में अलग तरह से बाहर रखी हैं और इसलिए ओपन से अलग ढंग से दिखाया गया है। क्या कोई यह समझा सकता है कि यह क्यों हो रहा है और मैं एक ही प्रारूप में दोनों सरणी कैसे कर सकता हूं?
यह मुझे आश्चर्यचकित था कि, '.astype (' uint8 ')' चरण में डेटा की प्रतिलिपि बनाते समय, प्रतिलिपि को सी-संगत रूप में पुन: व्यवस्थित नहीं किया गया था। – Jaime
हाँ, मुझे लगता है। स्वादिष्ट अंतर्निहित प्रारूप को वही रखता है। – jterrace
आप जिस स्मृति लेआउट को चाहते हैं उसे सुनिश्चित करने के लिए आप 'np.ascontiguousarray' का भी उपयोग कर सकते हैं ...' .flatten() 'हमेशा आपकी सरणी की प्रतिलिपि बनायेगा, भले ही इसे नहीं करना पड़े। और वास्तव में '.osting()' पहले से ही 'सी' संगत आउटपुट सुनिश्चित करता है। – seberg