আমি অবজেক্ট অরিয়েন্টেড এবং ভেক্টর ভিত্তিক ডিজাইনের মধ্যে ছিঁড়েছি। আমি এমন ক্ষমতা, কাঠামো এবং সুরক্ষা পছন্দ করি যা বস্তুগুলি পুরো আর্কিটেকচারকে দেয়। তবে একই সাথে, গতি আমার কাছে খুব গুরুত্বপূর্ণ, এবং অ্যারেতে সাধারণ ভাসমান ভেরিয়েবলগুলি সত্যই ভেক্টর ভিত্তিক ভাষা / মতলব বা পাইথনের ন্যাপির মতো লাইব্রেরিতে সহায়তা করে।
আমার পয়েন্টটি চিত্রিত করার জন্য আমি এখানে লিখেছি কোডের একটি অংশ
সমস্যা: টো অস্থিরতা সংখ্যা যুক্ত করা। যদি x এবং y দুটি অস্থিরতা সংখ্যা হয় তবে অস্থিরতার যোগফল (x ^ 2 + y ^ 2) ^ 0.5 হয় (নির্দিষ্ট গাণিতিক অবস্থা ধরে নিলেও এটি এখানে গুরুত্বপূর্ণ নয়)।
আমি এই অপারেশনটি খুব দ্রুত সম্পাদন করতে চাই এবং একই সাথে আমার এটিও নিশ্চিত করা দরকার যে লোকেরা কেবলমাত্র ভুল পথে (x + y) অস্থিরতা যুক্ত না করে। এ দুটিই গুরুত্বপূর্ণ।
ওও ভিত্তিক নকশাটি এরকম কিছু হবে:
from datetime import datetime
from pandas import *
class Volatility:
def __init__(self,value):
self.value = value
def __str__(self):
return "Volatility: "+ str(self.value)
def __add__(self,other):
return Volatility(pow(self.value*self.value + other.value*other.value, 0.5))
(পাশে: যারা পাইথনে নতুন তারা __add__
কেবল একটি ফাংশন যা +
অপারেটরকে ওভাররাইড করে )
আসুন আমি বলি যে আমি অস্থিরতার মানগুলির তালিকায় যুক্ত করব
n = 1000000
vs1 = Series(map(lambda x: Volatility(2*x-1.0), range(0,n)))
vs2 = Series(map(lambda x: Volatility(2*x+1.0), range(0,n)))
(পাশে: আবার, পাইথনের একটি সিরিজ একটি সূচক সহ একটি তালিকা সাজানো) এখন আমি দুটি যুক্ত করতে চাই:
t1 = datetime.now()
vs3 = vs1 + vs2
t2 = datetime.now()
print t2-t1
আমার মেশিনে কেবলমাত্র 3.8 সেকেন্ডের মধ্যে সংযোজন চলে, আমি যে ফলাফলগুলি দিয়েছি তাতে অবজেক্ট আরম্ভের সময়টি মোটেই অন্তর্ভুক্ত নয়, এটি কেবলমাত্র সংযোজন কোড যা সময়সাপেক্ষে হয়েছে। আমি যদি ন্যালি অ্যারে ব্যবহার করে একই জিনিস চালাই:
nv1 = Series(map(lambda x: 2.0*x-1.0, range(0,n)))
nv2 = Series(map(lambda x: 2.0*x+1.0, range(0,n)))
t3 = datetime.now()
nv3 = numpy.sqrt((nv1*nv1+nv2*nv2))
t4 = datetime.now()
print t4-t3
এটি 0.03 সেকেন্ডে চলে। এটি 100 গুণ বেশি দ্রুত!
আপনি দেখতে পাচ্ছেন, ওওপি উপায়টি আমাকে প্রচুর সুরক্ষা দেয় যে লোকেরা ভোলাটিলিটি ভুল উপায়ে যুক্ত করবে না, তবে ভেক্টর পদ্ধতিটি এত দ্রুত উন্মাদ! এমন কোন নকশা আছে যাতে আমি উভয়ই পেতে পারি? আমি নিশ্চিত যে আপনারা অনেকগুলি একই ধরণের ডিজাইনের পছন্দগুলিতে চলে এসেছেন, আপনি কীভাবে এটি ব্যবহার করেন?
এখানে ভাষার পছন্দটি অবিরাম। আমি জানি আপনারা অনেকে পরামর্শ দিতেন যে সি ++ বা জাভা ব্যবহার করুন এবং কোডটি যেভাবেই ভেক্টর ভিত্তিক ভাষার চেয়ে দ্রুত চলতে পারে। তবে সে কথাটি নয়। আমার পাইথন ব্যবহার করা দরকার, কারণ আমার কাছে অনেকগুলি লাইব্রেরি রয়েছে যা অন্যান্য ভাষায় পাওয়া যায় না। এটাই আমার বাধা। এর মধ্যে আমার অনুকূলিতকরণ করা দরকার।
এবং আমি জানি, অনেক লোক সমান্তরালকরণ, জিপিজিপু ইত্যাদির পরামর্শ দিবে তবে আমি প্রথমে একক কোর কর্মক্ষমতা সর্বাধিক করতে চাই এবং তারপরে আমি কোডের উভয় সংস্করণকেই সমান্তরাল করতে পারি।
আগাম ধন্যবাদ!