নিয়মিত Python তালিকা উপর NumPy এর সুবিধার কি কি?




arrays list (4)

NumPy শুধু আরো দক্ষ নয়; এটা আরও সুবিধাজনক। আপনি বিনামূল্যে ভেক্টর এবং ম্যাট্রিক্স অপারেশন অনেক পেতে, যা কখনও কখনও অপ্রয়োজনীয় কাজ এড়াতে অনুমতি দেয়। এবং তারা দক্ষতার সাথে বাস্তবায়িত হয়।

উদাহরণস্বরূপ, আপনি সরাসরি একটি ফাইল থেকে একটি অ্যারের মধ্যে আপনার ঘনক্ষেত্র পড়তে পারে:

x = numpy.fromfile(file=open("data"), dtype=float).reshape((100, 100, 100))

দ্বিতীয় মাত্রা বরাবর যোগ করুন:

s = x.sum(axis=1)

কোন কোষগুলি কোন থ্রেশহোল্ডের উপরে রয়েছে তা খুঁজুন:

(x > 0.5).nonzero()

তৃতীয় মাত্রা বরাবর প্রতি এমনকি সূচিবদ্ধ স্লাইস সরান:

x[:, :, ::2]

এছাড়াও, অনেক দরকারী লাইব্রেরি NumPy অ্যারে দিয়ে কাজ করে। উদাহরণস্বরূপ, পরিসংখ্যান বিশ্লেষণ এবং কল্পনা লাইব্রেরি।

এমনকি যদি আপনার কর্মক্ষমতা সমস্যা না থাকে, NumPy শেখার প্রচেষ্টাটি মূল্যবান।

নিয়মিত Python তালিকা উপর NumPy এর সুবিধার কি কি?

আমার প্রায় 100 আর্থিক বাজার সিরিজ আছে, এবং আমি 100x100x100 = 1 মিলিয়ন কোষের একটি ঘন অ্যারে তৈরি করতে যাচ্ছি। আমি স্ট্যান্ডার্ড ত্রুটি সহ অ্যারে পূরণ করতে প্রতিটি y এবং z সহ প্রতিটি x কে প্রতিস্থাপন (3-পরিবর্তনশীল) করব।

আমি শুনেছি যে "বৃহত ম্যাট্রিক্স" এর জন্য আমি পাইপন তালিকাগুলির বিরোধিতা হিসাবে কর্মক্ষমতা এবং মাপকাঠির কারণে NumPy ব্যবহার করা উচিত। থিংস, আমি পাইথন তালিকা জানি এবং তারা আমার জন্য কাজ বলে মনে হচ্ছে।

আমি NumPy সরানো হলে বেনিফিট কি হবে?

যদি আমার 1000 সিরিজ থাকে (অর্থাৎ, ঘনক্ষেত্রে 1 বিলিয়ন ভাসমান বিন্দু কোষ)?


অ্যালেক্স মেমরি দক্ষতা উল্লেখ, এবং রবার্টো সুবিধার উল্লেখ, এবং এই উভয় ভাল পয়েন্ট। আরো কিছু ধারনা জন্য, আমি গতি এবং কার্যকারিতা উল্লেখ করব।

কার্যকারিতা: আপনি NumPy, FFTs, convolutions, দ্রুত অনুসন্ধান, মৌলিক পরিসংখ্যান, রৈখিক বীজগণিত, হিস্টোগ্রাম, ইত্যাদি সঙ্গে অনেক নির্মিত হয় এবং সত্যিই, FFTs ছাড়া কে বাঁচতে পারেন?

গতি: এখানে একটি তালিকা এবং একটি NumPy অ্যারের সমষ্টি করার একটি পরীক্ষা রয়েছে, যা দেখায় যে NumPy অ্যারের পরিমাণ 10x দ্রুত (এই পরীক্ষায় - মাইলেজটি পরিবর্তিত হতে পারে)।

from numpy import arange
from timeit import Timer

Nelements = 10000
Ntimeits = 10000

x = arange(Nelements)
y = range(Nelements)

t_numpy = Timer("x.sum()", "from __main__ import x")
t_list = Timer("sum(y)", "from __main__ import y")
print("numpy: %.3e" % (t_numpy.timeit(Ntimeits)/Ntimeits,))
print("list:  %.3e" % (t_list.timeit(Ntimeits)/Ntimeits,))

যা আমার সিস্টেমে (যখন আমি ব্যাকআপ চালাচ্ছি) দেয়:

numpy: 3.004e-05
list:  5.363e-04

টাইমসরির বিজ্ঞাপনে NumPy এর উপর ভিত্তি করে টাইমসরিরগুলির জন্য সমর্থন রয়েছে তা নোট করুন:

http://pytseries.sourceforge.net

রিগ্রেশন করার জন্য, আমি নিশ্চিত যে NumPy 100 ^ 3 সমস্যার জন্য এমনকি তালিকাগুলির চেয়ে দ্রুততর এবং আরো সুবিধাজনক আদেশের আদেশ পাবে।


নুপি এর অ্যারে পাইথন তালিকাগুলির তুলনায় আরো কমপ্যাক্ট - পাইথনের মধ্যে তালিকাভুক্ত তালিকাগুলির তালিকাটি কমপক্ষে ২0 এমবি বা এর বেশি সময় নেবে, তবে কোষগুলিতে একক-স্পষ্টতা ফ্লোট সহ নুপপি 3D অ্যারে 4 মেগাবাইটে ফিট হবে। NumPy এর সাথে পাঠ্য এবং আইটেমগুলিতে অ্যাক্সেস আরও দ্রুত।

সম্ভবত আপনি এক মিলিয়ন কোষের জন্য এটি খুব বেশি যত্ন নেন না, তবে আপনি অবশ্যই একটি বিলিয়ন কোষের জন্য চাইবেন - কোনও 32-বিট আর্কিটেকচারের সাথে যোগাযোগ করবে না, তবে 64-বিট বিল্ড দিয়ে NumPy 4 GB বা তারও বেশি দূরে চলে যাবে , পাইথন একা অন্তত 12 গিগাবাইট (অনেক পয়েন্টার যা আকারে দ্বিগুণ) দরকার - হার্ডওয়্যারের দামি টুকরো!

পার্থক্য বেশিরভাগই "পরোক্ষতা" এর কারণে হয় - একটি পাইথন তালিকা পাইথন বস্তুর পয়েন্টারগুলির একটি অ্যারে, কমপক্ষে 4 বাইট পয়েন্টার প্লাস 16 বাইট এমনকি ক্ষুদ্রতম পাইথন বস্তুর জন্য (4 পয়েন্টারের জন্য 4, রেফারেন্স গণনার জন্য 4, 4 মূল্যের জন্য - এবং মেমরি বরাদ্দকারী 16 পর্যন্ত রাউন্ড)। একটি NumPy অ্যারের অভিন্ন মানের একটি অ্যারে - একক-স্পষ্টতা সংখ্যা প্রতিটি 4 বাইট, ডবল স্পষ্টতা বেশী, 8 বাইট লাগে। কম নমনীয়, তবে আপনি স্ট্যান্ডার্ড পাইথন তালিকাগুলির নমনীয়তার জন্য উল্লেখযোগ্যভাবে অর্থ প্রদান করেন!





numpy-ndarray