में यह विशाल (गैर-स्पैस) numpy मैट्रिक्स फिट क्यों है numpy.ndarray.nbytes
द्वारा रिपोर्ट की गई मुझे बहुत उलझन में है।रैम
मैंने अभी आकार 1 मिलियन (10^6) का एक पहचान मैट्रिक्स बनाया है, जिसके कारण 1 ट्रिलियन पंक्तियां (10^12) हैं। Numpy रिपोर्ट करता है कि यह सरणी 7.28TB है, फिर भी पायथन प्रक्रिया केवल 3.98 जीबी मेमोरी का उपयोग करती है, जैसा कि ओएसएक्स गतिविधि मॉनीटर द्वारा रिपोर्ट किया गया है।
- क्या संपूर्ण सरणी स्मृति में निहित है?
- क्या नोम्पी किसी भी तरह से इसके प्रतिनिधित्व को संपीड़ित करता है, या ओएस द्वारा संभाला जाता है?
- यदि मैं बस
y = 2 * x
की गणना करता हूं, जोx
के समान आकार होना चाहिए, तो प्रक्रिया स्मृति लगभग 30GB तक बढ़ जाती है, जब तक कि यह ओएस द्वारा नहीं मारा जाता। क्यों, और मेमोरी उपयोग के बिना एक्स पर किस प्रकार के ऑपरेशन एक्स का संचालन कर सकते हैं?
इस कोड को मैं प्रयोग किया जाता है:
import numpy as np
x = np.identity(1e6)
x.size
# 1000000000000
x.nbytes/1024 ** 4
# 7.275957614183426
y = 2 * x
# python console exits and terminal shows: Killed: 9
विंडोज़ पर न तो 32 बिट और न ही 64 बिट संस्करण ने मुझे इतना बड़ा मैट्रिक्स आवंटित करने की अनुमति दी –
मेरा अनुमान है कि यह [this] (http://stackoverflow.com/q/27574881/1461210) से संबंधित है, हालांकि मैं हूं थोड़ा आश्चर्य है कि यह सिर्फ शून्य के बजाय पहचान matrices के लिए काम करता है। –
@ टामास हेगेडस क्या होगा यदि आप आकार '2e4' का पहचान मैट्रिक्स बनाते हैं? इसे 2.98 जीबी रैम लेना चाहिए। क्या प्रक्रिया इतनी रैम लेती है? – Rems