मेरी 64-बिट Debian/लेनी प्रणाली पर (4GByte रैम + 4GByte स्वैप विभाजन) मैं सफलतापूर्वक कर सकते हैं:स्मृति खपत को कम करने के लिए scipy/numpy परिशुद्धता को कम करने का कोई तरीका है?
v=array(10000*random([512,512,512]),dtype=np.int16)
f=fftn(v)
लेकिन च के साथ किया जा रहा है एक np.complex128
स्मृति खपत चौंकाने वाला है, और मैं ज्यादा कुछ नहीं कर सकते हैं परिणाम के साथ और अधिक (उदाहरण के लिए गुणांक को संशोधित करें और फिर f=ifftn(f)
) MemoryError
ट्रेसबैक के बिना।
कुछ और रैम और/या मेरे स्वैप विभाजन को विस्तारित करने के बजाय, क्या scipy/numpy "डिफ़ॉल्ट परिशुद्धता" को नियंत्रित करने का कोई तरीका है और इसके बजाय यह एक जटिल 64 सरणी की गणना करता है?
मुझे पता है कि मैं इसे बाद में f=array(f,dtype=np.complex64)
के साथ कम कर सकता हूं; मैं वास्तव में 32-बिट परिशुद्धता और आधा स्मृति में एफएफटी काम करना चाहता हूं।
rfftn कार्यों के सूचक के लिए धन्यवाद; हाँ वे अच्छी तरह से काम करते हैं। एफ = आरएफटीएन (वी), एफ = सरणी (एफ, dtype = np.complex64) के लिए पीक उपयोग, एफ = irfftn (एफ) उलटा में 6224MByte है। (इंटरमीडिएट कास्ट जटिल 64 के बिना यह 7754 एमबीटीई का उपयोग करता है ... थोड़ा कसकर)। – timday
क्या आपका उत्पादन सरणी आकार वास्तव में 512^3 से अधिक है? मुझे यकीन नहीं है कि आप 4x रैम उपयोग की तरह कुछ क्यों देख रहे हैं जो मैं ऊपर अपने उदाहरण कोड में देखता हूं ... – slacy
कृपया उस बिट को संशोधित करें जहां आप कहते हैं 'एकल-परिशुद्धता मौजूद नहीं है क्योंकि आपके मूल हार्डवेयर 128-बिट' हैं- मूल हार्डवेयर 64 बिट्स से 128 बिट्स नहीं है, और एफएफटीडब्ल्यू दोनों का समर्थन करने में बहुत लचीला है। जैसा कि डेविड का जवाब इंगित करता है, 'scipy.fftpack.rfft' इसका समर्थन करता है: 'scipy.fftpack.rfft (v.astype (np.float32))। Dtype' रिटर्न' float32'। दुर्भाग्य से, 2015 में भी, Sumy के पीछे बेवकूफ समर्थन है: https://github.com/numpy/numpy/issues/6012 –