2012-11-21 11 views
9

मैं उत्पादन के लिए कोशिश कर रहा हूँ एक 4D Numpy numpy.savetxt का उपयोग करक्या numpy.savetxt एन-आयामी ndarrays पर एन> 2 के साथ प्रयोग किया जा सकता है?

हालांकि numpy कह रही है कि एक नाव तर्क की आवश्यकता है जब मैं इस सरणी पारित करने के लिए कोशिश एक त्रुटि देता है एक प्लेन टेक्स्ट फाइल करने के लिए सरणी तैरने लगते हैं। फिर भी numpy दस्तावेज़ निर्दिष्ट करता है कि पारित करने के लिए तर्क सिर्फ सरणी होना चाहिए ... नहीं कि यह अधिकतम रैंक 2 होना चाहिए। एकमात्र तरीका मैं इसे काम कर सकता हूं डेटा को 2 डी में दोबारा बदलकर (और यह वास्तव में नहीं है डेटा संगठन के कारणों के लिए हमेशा व्यावहारिक)

क्या इसके आसपास कोई रास्ता है? या एक जरूरी है कि numpy सरणी 2 डी करने के लिए reshape? मैं उम्मीदवार था कि कॉलर-बाय-कॉलम शैली (आयामों के माध्यम से काम करना) जैसे किलान में डेटा को पढ़ने में सक्षम होना चाहिए।

क्या अन्य संभावनाएं हैं? ध्यान दें कि मैं npy प्रारूप का उपयोग नहीं करना चाहता क्योंकि मैं किसी अन्य प्रोग्राम के साथ संगतता की तलाश करता हूं जिसके लिए सादे टेक्स्ट प्रारूप की आवश्यकता होती है।

उत्तर

3

एक अलग दृष्टिकोण एक के रूप में सरणी को बचाने के लिए है संख्याओं की सरल सूची (सरणी का फ्लैट संस्करण) और इसके आकार के बारे में जानकारी को बचाएं।

बहुआयामी सरणी के बारे में समस्या यह है कि उन्हें पाठ प्रारूप में प्रोग्राम से प्रोग्राम में स्थानांतरित करना इतना आसान नहीं है।

आप कुछ इस तरह कर सकते हैं:

myarray = rand(5,5,5) 
name = 'myarray'+myarray.shape+'.txt' 
np.savetxt(name,myarray.flatten()) 

और प्रारंभिक आकार को बहाल करने के

5

आप numpy.savetxt के लिए स्रोत कोड को देखो, तो आप

for row in X: 
     fh.write(asbytes(format % tuple(row) + newline)) 

तो numpy.savetxt केवल 1- या 2 डी-सरणियों के लिए काम करेंगे मिल जाएगा।

अंतर के लिए, आप JSON इस्तेमाल कर सकते हैं अगर आप एक सूची में numpy सरणी परिवर्तित करने के लिए पर्याप्त स्मृति है:

import json 
import numpy as np 
a = np.arange(24).reshape(-1, 2, 3, 4).astype('float') 
a[0,0,0,0] = np.nan 
with open('/tmp/out', 'w') as f: 
    json.dump(a.tolist(), f, allow_nan = True) 

पैदावार

[[[[NaN, 1.0, 2.0, 3.0], [4.0, 5.0, 6.0, 7.0], [8.0, 9.0, 10.0, 11.0]], [[12.0, 13.0, 14.0, 15.0], [16.0, 17.0, 18.0, 19.0], [20.0, 21.0, 22.0, 23.0]]]] 
+0

THX, सुंदर आकार फ़ाइल नाम में inclued के बारे में जानकारी का उपयोग करें। हालांकि मेरे उद्देश्यों के लिए प्रयोग योग्य नहीं है। हालांकि यह मुझे जेसन खोजा। उस के लिए Thx। किसी भी मामले में जिस एप्लिकेशन को मुझे संवाद करने की आवश्यकता है, उसे हमेशा 2 डी डेटा की आवश्यकता होती है (जैसा कि मैंने पाया)। तो मुझे लगता है कि यह सिर्फ "बुद्धिमानी से" numpy सरणी reshape करने के लिए मेरे ऊपर है –

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