2011-06-27 9 views
14

मैं टेक्स्ट संख्या में जटिल संख्याओं की एक सरणी को सहेजने के लिए numpy.savetxt() का उपयोग करना चाहता हूं। समस्याएं:numpy.savetxt का उपयोग कर जटिल संख्याओं की सरणी को कैसे सहेजना और लोड करना है?

  • यदि आप जटिल प्रारूप स्ट्रिंग के साथ जटिल सरणी को सहेजते हैं, तो काल्पनिक भाग को त्याग दिया जाता है।
  • यदि आप fmt='%s' का उपयोग करते हैं, तो numpy.loadtxt() तब तक लोड नहीं हो सकता जब तक आप dtype=complex, converters={0: lambda s: complex(s)} निर्दिष्ट नहीं करते। फिर भी, यदि सरणी में NaN है, तो लोडिंग अभी भी विफल हो जाती है।

ऐसा लगता है कि किसी को इस multipletimes Numpy मेलिंग सूची पर के बारे में पूछताछ की है और यहां तक ​​कि एक bug दायर की, लेकिन कोई प्रतिसाद नहीं मिला है। इससे पहले कि मैं खुद को एक साथ रखूं, क्या ऐसा करने के लिए एक कैननिक तरीका है?

उत्तर

11

यह आसान है और सरणी को वास्तविक सरणी के रूप में पुनः परिभाषित करने के लिए कुछ अस्थायी सरणी बचाता है।

सहेजा जा रहा है:

numpy.savetxt('outfile.txt', array.view(float)) 

लोड हो रहा है:

array = numpy.loadtxt('outfile.txt').view(complex) 

आप फ़ाइल में एक ही लाइन पर वास्तविक और काल्पनिक हिस्सा है करने के लिए पसंद करते हैं, आप उपयोग कर सकते

numpy.savetxt('outfile.txt', array.view(float).reshape(-1, 2)) 

या

array = numpy.loadtxt('outfile.txt').view(complex).reshape(-1) 

क्रमशः।

(ध्यान दें कि न तो view() है और न ही reshape() प्रतियां सरणी - यह सिर्फ एक अलग तरीके से एक ही डेटा पुनर्व्याख्या जाएगा।) प्रश्न प्रश्नकर्ता से

परिशिष्ट:

आप को बचाने के लिए चाहते हैं एक ही फाइल में एक जटिल श्रृंखला की तुलना में अधिक है, तो आप यह इतना की तरह कर सकते हैं:

numpy.savetxt('outfile.txt', numpy.column_stack([ 
    array1.view(float).reshape(-1, 2), 
    array2.view(float).reshape(-1, 2), 
])) 

array1, array2 = numpy.loadtxt('outfile.txt', unpack=True).view(complex) 

पुन: आकार देने के लिए आवश्यक है क्योंकि numpy.view() नहीं है घुमावदार सरणी पर काम करते हैं।

+0

उत्कृष्ट! छोटा और सुरुचिपूर्ण। – ptomato

2

कोई भी मेरा समाधान है, अगर कोई Google से इस प्रश्न को हिट करता है।

सहेजा जा रहा है:

numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag])) 

लोड हो रहा है:

array_real, array_imag = numpy.loadtxt('outfile.txt', unpack=True) 
array = array_real + 1j * array_imag 

मैं अभी भी एक बेहतर समाधान के लिए सही का निशान अवार्ड होगा!

संबंधित मुद्दे

 संबंधित मुद्दे