একটি সংক্ষিপ্ত উত্তরের জন্য আপনার ব্যবহার করা উচিত 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)
print(x == x_loaded)
প্রসারিত উত্তর:
শেষ পর্যন্ত এটি আপনার প্রয়োজনের উপর নির্ভর করে কারণ আপনি এটিকে মানব পাঠযোগ্য ফর্ম্যাটও সংরক্ষণ করতে পারেন (এই ফাইলটি একটি সিএমভি ফাইলে একটি নম্পপি অ্যারে দেখুন ) বা আপনার লাইব্রেরির সাথেও যদি আপনার ফাইলগুলি অত্যন্ত বড় হয় ( ন্যাপি অ্যারেগুলি সংরক্ষণের সর্বোত্তম উপায়টি দেখুন) বর্ধিত আলোচনার জন্য ডিস্কে )।
যাইহোক, (যেহেতু আপনি আপনার প্রশ্নের "সঠিকভাবে" শব্দটি ব্যবহার করেন সেহেতু একটি সম্প্রসারণ করা) আমি এখনও মনে করি বাক্সের বাইরে নামি ফাংশনটি ব্যবহার করে (এবং সর্বাধিক কোড!) সম্ভবত বেশিরভাগ ব্যবহারকারীর প্রয়োজন মেটাবে। সর্বাধিক গুরুত্বপূর্ণ কারণ এটি ইতিমধ্যে কাজ করে । অন্য যে কোনও কারণে অন্য কিছু ব্যবহার করার চেষ্টা করা আপনাকে অপ্রত্যাশিতভাবে দীর্ঘ খরগোশের গর্তে নিয়ে যেতে পারে কেন এটি কাজ করে না তা নির্ধারণ করতে এবং এটি কাজ করতে বাধ্য করে।
উদাহরণস্বরূপ এটি আচার দিয়ে সংরক্ষণ করার চেষ্টা করুন Take আমি চেষ্টা করেছি কেবল মজা করার জন্য এবং কমপক্ষে 30 মিনিট সময় লেগেছিল বুঝতে পেরেছিলাম যে আচার আমার জিনিসগুলি সংরক্ষণ করবে না যদি না আমি ফাইলটি বাইট মোডে না খুলি এবং না পড়ি wb
। গুগল করতে সময় লাগল, জিনিস চেষ্টা করুন, ত্রুটির বার্তাটি বুঝতে পারেন ইত্যাদি ... ছোট বিবরণ তবে সত্য যে এটি ইতিমধ্যে আমাকে একটি ফাইল জটিল জিনিস অপ্রত্যাশিত উপায়ে খোলার প্রয়োজন ছিল। এটি যুক্ত করার জন্য আমাকে এটি পুনরায় পড়তে হবে (কোন বিটিডব্লিউ বিভ্রান্তিকর) এর মধ্যে একটি, এ +, ডাব্লু, ডাব্লু +, এবং আর + অন্তর্নির্মিত খোলা ফাংশনটির মধ্যে পার্থক্য? ।
সুতরাং যদি কোনও ইন্টারফেস থাকে যা আপনার চাহিদা পূরণ করে তবে এটি ব্যবহার করুন যদি না আপনার ( খুব ) ভাল কারণ থাকে (যেমন মাতলাবের সাথে সামঞ্জস্যতা বা কোনও কারণে আপনার ফাইলটি পড়তে চান এবং পাইথনে মুদ্রণ করা সত্যিই আপনার প্রয়োজনগুলি পূরণ করে না, যা প্রশ্নবিদ্ধ হতে পারে)। তদুপরি, আপনার যদি এটি অপ্টিমাইজ করা প্রয়োজন হয় তবে আপনি পরে লাইনটি খুঁজে বের করতে পারবেন (একটি সাধারণ নিম্পক ফাইল খোলার মতো অব্যবহৃত জিনিসগুলি ডিবাগ করার জন্য যুগে যুগে কাটানোর চেয়ে)।
সুতরাং ইন্টারফেস / নম্পি সরবরাহ ব্যবহার করুন । এটি নিখুঁত নাও হতে পারে এটি সম্ভবত সবচেয়ে সূক্ষ্ম, বিশেষত এমন একটি লাইব্রেরির জন্য যা প্রায় দীর্ঘকালীন।
আমি ইতিমধ্যে বেশ কিছু উপায়ে নিম্পির সাথে ডেটা সংরক্ষণ এবং লোড করার জন্য ব্যয় করেছি সুতরাং এটির সাথে মজা করুন, আশা করি এটি সাহায্য করবে!
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
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)
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.
আপনি যদি এটি ব্যবহার করার সিদ্ধান্ত নেন (আপনি আদর্শ সমাধান থেকে দূরে যাওয়ার পরামর্শ দিয়েছিলেন যাতে বাগগুলি প্রত্যাশা করা হয়!) আপনি আবিষ্কার করতে পারেন যে আপনি এটি সংরক্ষণ করতে যুক্তির নাম ব্যবহার করতে হবে, যদি না আপনি চান ডিফল্ট নাম ব্যবহার করুন। সুতরাং যদি এটি ইতিমধ্যে কাজ করে তবে এটি ব্যবহার করবেন না (বা কোনও কাজ এটি ব্যবহার করে!)
- পিকলও নির্বিচারে কোড প্রয়োগের জন্য অনুমতি দেয়। কিছু লোক সুরক্ষার কারণে এটি ব্যবহার করতে নাও চাইবে।
- মানব পাঠযোগ্য ফাইলগুলি বানানো ব্যয়বহুল etc. সম্ভবত এটির পক্ষে এটি উপযুক্ত নয়।
hdf5
বড় ফাইলগুলির জন্য কিছু বলা আছে । কুল! https://stackoverflow.com/a/9619713/1601580
নোট করুন এটি একটি সম্পূর্ণ উত্তর নয়। তবে অন্যান্য সংস্থানগুলির জন্য এটি পরীক্ষা করুন: