एक छोटे से उत्तर के लिए आपको उपयोग करना चाहिए np.save
और np.load
। इनका लाभ यह है कि वे सुपी लाइब्रेरी के डेवलपर्स द्वारा बनाए जाते हैं और वे पहले से ही काम करते हैं (प्लस संभवतः पहले से ही अच्छी तरह से अनुकूलित हैं आदि)
import numpy as np
from pathlib import Path
path = Path('~/data/tmp/').expanduser()
path.mkdir(parents=True, exist_ok=True)
lb,ub = -1,1
num_samples = 5
x = np.random.uniform(low=lb,high=ub,size=(1,num_samples))
y = x**2 + x + 2
np.save(path/'x', x)
np.save(path/'y', y)
x_loaded = np.load(path/'x.npy')
y_load = np.load(path/'y.npy')
print(x is x_loaded) # False
print(x == x_loaded) # [[ True True True True True]]
विस्तारित उत्तर:
अंत में यह वास्तव में आपकी आवश्यकताओं पर निर्भर करता है क्योंकि आप इसे मानव पठनीय प्रारूप भी सहेज सकते हैं (इस डम्प को एक Numvy सरणी को एक csv फ़ाइल में देखें ) या अन्य पुस्तकालयों के साथ भी अगर आपकी फाइलें बहुत बड़ी हैं ( संख्यात्मक सारणी को संरक्षित करने का यह सबसे अच्छा तरीका देखें) डिस्क पर एक विस्तारित चर्चा के लिए )।
हालांकि, जब से आप अपने प्रश्न में "ठीक से" शब्द का उपयोग करते हैं तब से एक विस्तार कर रहा है) मुझे अभी भी लगता है कि बॉक्स से बाहर और (सबसे कोड!) सबसे अधिक उपयोगकर्ता की जरूरतों को पूरा करता है। सबसे महत्वपूर्ण कारण यह है कि यह पहले से ही काम करता है । किसी अन्य कारण से किसी और चीज का उपयोग करने की कोशिश करना आपको अप्रत्याशित रूप से लंबे खरगोश छेद पर ले जा सकता है ताकि यह पता चले कि यह काम क्यों नहीं करता है और इसे काम करने के लिए मजबूर नहीं करता है।
उदाहरण के लिए अचार के साथ इसे बचाने की कोशिश करें। मैंने कोशिश की कि बस मज़े के लिए और मुझे यह महसूस करने में कम से कम 30 मिनट का समय लगे कि अचार मेरे सामान को तब तक नहीं बचाएगा जब तक कि मैंने फ़ाइल को बाइट्स मोड में नहीं खोला और पढ़ा wb
। Google को समय दिया, चीज़ की कोशिश करें, त्रुटि संदेश आदि को समझें ... छोटा विवरण लेकिन यह तथ्य कि मुझे पहले से ही अप्रत्याशित तरीके से फ़ाइल जटिल चीजों को खोलने की आवश्यकता थी। यह जोड़ने के लिए कि मुझे इस (जो btw को भ्रमित करने की तरह है) को फिर से पढ़ने के लिए आवश्यक है , बिल्ट-इन ओपन फंक्शन में मोड ए, ए, डब्ल्यू, डब्ल्यू + और आर + के बीच अंतर। ।
इसलिए यदि कोई ऐसा इंटरफ़ेस है जो आपकी आवश्यकताओं को पूरा करता है, तो इसका उपयोग तब तक करें जब तक कि आपके पास एक बहुत ( बहुत अच्छा) कारण न हो (जैसे मैटलैब के साथ संगतता या किसी कारण से आपका वास्तव में फ़ाइल को पढ़ना और अजगर में मुद्रण करना वास्तव में आपकी आवश्यकताओं को पूरा नहीं करता है, जो संदिग्ध हो सकता है)। इसके अलावा, सबसे अधिक संभावना है कि अगर आपको इसे अनुकूलित करने की आवश्यकता है, तो आपको बाद में पता चलेगा कि लाइन के नीचे (खर्च करने की उम्र के बजाय एक साधारण खसखस फ़ाइल खोलने की तरह बेकार सामान)।
इसलिए इंटरफ़ेस / सुन्न प्रदान का उपयोग करें । यह सही नहीं हो सकता है यह सबसे अधिक संभावना है ठीक है, विशेष रूप से एक पुस्तकालय के लिए जो लगभग लंबे समय तक सुन्न रहा है।
मैंने पहले से ही बचत और लोडिंग डेटा को एक गुच्छा के रूप में सुन्न के साथ बिताया है ताकि इसके साथ मज़ेदार हो, आशा है कि यह मदद करता है!
import numpy as np
import pickle
from pathlib import Path
path = Path('~/data/tmp/').expanduser()
path.mkdir(parents=True, exist_ok=True)
lb,ub = -1,1
num_samples = 5
x = np.random.uniform(low=lb,high=ub,size=(1,num_samples))
y = x**2 + x + 2
# using save (to npy), savez (to npz)
np.save(path/'x', x)
np.save(path/'y', y)
np.savez(path/'db', x=x, y=y)
with open(path/'db.pkl', 'wb') as db_file:
pickle.dump(obj={'x':x, 'y':y}, file=db_file)
## using loading npy, npz files
x_loaded = np.load(path/'x.npy')
y_load = np.load(path/'y.npy')
db = np.load(path/'db.npz')
with open(path/'db.pkl', 'rb') as db_file:
db_pkl = pickle.load(db_file)
print(x is x_loaded)
print(x == x_loaded)
print(x == db['x'])
print(x == db_pkl['x'])
print('done')
मैंने जो कुछ सीखा उस पर कुछ टिप्पणियां:
np.save
जैसा कि अपेक्षित था, यह पहले से ही इसे अच्छी तरह से संपीड़ित करता है (देखें https://stackoverflow.com/a/55750128/1601580 ), बिना किसी फ़ाइल को खोले बॉक्स से बाहर काम करता है। स्वच्छ। आसान। कुशल। इसका इस्तेमाल करें।
np.savez
एक असम्पीडित प्रारूप का उपयोग करता है ( डॉक्स देखें ) Save several arrays into a single file in uncompressed
.npz format.
यदि आप इसका उपयोग करने का निर्णय लेते हैं (आपको मानक समाधान से दूर जाने की चेतावनी दी गई थी, तो बग्स की अपेक्षा करें!) आपको पता चल सकता है कि आपको इसे बचाने के लिए तर्क नामों का उपयोग करने की आवश्यकता है, जब तक कि आप नहीं चाहते हैं। डिफ़ॉल्ट नामों का उपयोग करें। तो पहले से ही काम करता है (या किसी भी काम करता है कि इस का उपयोग न करें!)
- अचार भी मनमाना कोड निष्पादन के लिए अनुमति देता है। कुछ लोग सुरक्षा कारणों से इसका उपयोग नहीं करना चाहते हैं।
- मानव पठनीय फ़ाइलें आदि बनाने के लिए महंगी हैं। शायद इसके लायक नहीं है।
hdf5
बड़ी फ़ाइलों के लिए कुछ कहा जाता है । ठंडा! https://stackoverflow.com/a/9619713/1601580
ध्यान दें कि यह एक संपूर्ण उत्तर नहीं है। लेकिन अन्य संसाधनों के लिए यह जाँच करें: