मैं सबसे स्मृति-कारगर तरीका एक जटिल numpy ndarrayअधिकांश स्मृति-कारगर तरीका
arr = np.empty((250000, 150), dtype='complex128') # common size
का पूर्ण वर्ग मूल्य की गणना करने के लिए देख रहा हूँ
मुझे एक ufunc नहीं मिला है जो वास्तव में np.abs()**2
करेगा।
उस आकार और प्रकार की एक सरणी के रूप में लगभग आधा जीबी लगता है, मैं मुख्य रूप से स्मृति-कुशल तरीके की तलाश में हूं।
मैं इसे पोर्टेबल भी पसंद करूंगा, इसलिए आदर्श रूप से यूफुनक्स का कुछ संयोजन।
अब तक मेरी समझ है कि इस यह बेकार की गणना के बारे में सबसे अच्छा
result = np.abs(arr)
result **= 2
(**0.5)**2
होना चाहिए, लेकिन यथा-स्थान **2
गणना करना चाहिए। कुल मिलाकर शीर्ष स्मृति आवश्यकता केवल मूल सरणी आकार + परिणाम सरणी आकार है, जो 1.5 * मूल सरणी आकार होना चाहिए क्योंकि परिणाम वास्तविक है।
अगर मैं बेकार **2
कॉल से छुटकारा प्राप्त करना चाहता था कि मैं इस
result = arr.real**2
result += arr.imag**2
की तरह कुछ करने के लिए होगा लेकिन अगर मैं गलत नहीं हूँ, यह मैं के लिए स्मृति को आबंटित करने का मतलब होगा वास्तविक और काल्पनिक भाग गणना दोनों, इसलिए शीर्ष स्मृति उपयोग 2.0 * मूल सरणी आकार होगा। arr.real
गुण भी एक गैर-संगत सरणी लौटाते हैं (लेकिन यह कम चिंता का विषय है)।
क्या मुझे कुछ भी याद आ रही है? क्या ऐसा करने के कोई बेहतर तरीके हैं?
संपादित करें 1: मैं यह स्पष्ट नहीं बनाने के लिए माफी चाहता हूँ, मैं आगमन के ऊपर लिख नहीं करना चाहते, तो मैं यह के रूप में बाहर का उपयोग नहीं कर सकते हैं।
मैं इसे एक उत्तर के रूप में स्वीकार करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि यह पोर्टेबल कितना है। अधिकांश मशीनों पर एनाकोंडा के साथ इन दिनों इंस्टॉल करने के लिए नुम्बा बहुत आसान है, लेकिन मुझे यकीन नहीं है कि आर्किटेक्चर में वास्तविक एलएलवीएम बाइंडिंग कितने पोर्टेबल हैं। शायद आप इस उत्तर की पोर्टेबिलिटी के बारे में कुछ जानकारी जोड़ सकते हैं। –
ठीक है, मैं एलएलवीएम विशेषज्ञ हूं, लेकिन वर्तमान संस्करण (0.31.0) का दस्तावेज कहता है: समर्थित लिनक्स, विंडोज 7 और ओएस एक्स 10.9 और बाद में हैं। – burnpanck