मेरी धारणा यह है कि न्यूमपी में, दो सरणी एक ही स्मृति साझा कर सकते हैं। निम्न उदाहरण लें:क्या यह जांचने का कोई तरीका है कि NumPy arrays समान डेटा साझा करते हैं या नहीं?
import numpy as np
a=np.arange(27)
b=a.reshape((3,3,3))
a[0]=5000
print (b[0,0,0]) #5000
#Some tests:
a.data is b.data #False
a.data == b.data #True
c=np.arange(27)
c[0]=5000
a.data == c.data #True (Same data, not same memory storage), False positive
तो स्पष्ट रूप से b
a
की एक प्रतिलिपि बनाने नहीं किया था; इसने अभी कुछ नया मेटा-डेटा बनाया है और इसे उसी मेमोरी बफर से जोड़ा है जो a
उपयोग कर रहा है। क्या यह जांचने का कोई तरीका है कि दो सरणी एक ही मेमोरी बफर का संदर्भ देते हैं या नहीं?
मेरा पहला प्रभाव a.data is b.data
का उपयोग करना था, लेकिन यह झूठा रिटर्न देता है। मैं a.data == b.data
कर सकता हूं जो सच देता है, लेकिन मुझे नहीं लगता कि a
और b
एक ही मेमोरी बफर साझा करें, केवल a
द्वारा संदर्भित स्मृति की ब्लॉक और b
द्वारा संदर्भित एक ही बाइट्स है।
यहां सबसे प्रासंगिक प्रश्न पूछा गया है: http://stackoverflow.com/questions/10747748/how-do-i-check-that-two-slices-of-numpy-arrays-are-the-same- या ओवरलैपिंग –
@RobertKern - धन्यवाद। मैंने वास्तव में उस पोस्ट को देखा था, लेकिन चूंकि मुझे 'numpy.may_share_memory' के लिए प्रलेखन नहीं मिला (अंतर्निहित 'सहायता' के अलावा), मैंने सोचा कि कुछ और हो सकता है - उदा। 'Numpy.uses_same_memory_exactly'। (मेरा उपयोग मामला दूसरे की तुलना में थोड़ा कम सामान्य है, इसलिए मैंने सोचा कि एक और निश्चित उत्तर हो सकता है)। वैसे भी, कुछ नामांकित मेलिंग सूचियों पर आपका नाम देखा है, मैं अनुमान लगा रहा हूं कि जवाब "ऐसा कोई कार्य नहीं है"। – mgilson
'numpy.may_share_memory()' संदर्भ मैनुअल के संगठन के दुर्घटना के कारण संदर्भ मैनुअल में दिखाई नहीं देता है। उपयोग करने के लिए यह सही बात है। दुर्भाग्यवश, इस समय कोई 'util_same_memory_exactly()' फ़ंक्शन नहीं है। इस तरह के एक समारोह को लागू करने के लिए एक बाध्य रैखिक डायफोंटाइन समीकरण, एनपी-हार्ड समस्या को हल करने की आवश्यकता होती है। समस्या का आकार आमतौर पर बहुत बड़ा नहीं होता है, लेकिन केवल एल्गोरिदम लिखना परेशान होता है, इसलिए यह अभी तक नहीं किया गया है। यदि हम करते हैं, तो इसे 'numpy' में शामिल किया जाएगा।may_share_memory() ', इसलिए मैं इसका उपयोग करने की अनुशंसा करता हूं। –