ম্যাটপ্ললিব = ব্যবহারের সহজতা, জ্ঞানপ্লট = (কিছুটা ভাল) পারফরম্যান্স
আমি জানি এই পোস্টটি পুরানো এবং উত্তর হয়েছে তবে আমি পাশ দিয়ে যাচ্ছিলাম এবং আমার দুটি সেন্ট রাখতে চাইছিলাম। এখানে আমার উপসংহারটি দেওয়া হয়েছে: যদি আপনার কাছে অতি-বৃহত্তর ডেটা সেট থাকে তবে আপনার ম্যাটপ্লটলিব ব্যবহার করা উচিত। এটি সহজ এবং আরও ভাল দেখাচ্ছে। তবে, আপনার যদি সত্যিই পারফরম্যান্সের প্রয়োজন হয় তবে আপনি জ্ঞানপ্লট ব্যবহার করতে পারেন। আমি আপনার মেশিনে এটি পরীক্ষা করে দেখার জন্য কিছু কোড যুক্ত করেছি এবং এটি যদি সত্যিকারের পার্থক্যের সৃষ্টি করে তবে নিজেই দেখুন (এটি বাস্তব পারফরম্যান্সের মানদণ্ড নয় তবে একটি প্রথম ধারণা দেওয়া উচিত)।
নিম্নলিখিত গ্রাফটি প্রয়োজনীয় সময়কে (সেকেন্ডে) প্রতিনিধিত্ব করে:
- একটি এলোমেলো স্ক্যাটার গ্রাফ প্লট করুন
- গ্রাফটি একটি পিএনজি ফাইলে সংরক্ষণ করুন
কনফিগারেশন:
- gnuplot: 5.2.2
- gnuplot-py: 1.8
- ম্যাটপ্লোটলিব: ২.১.২
আমি মনে করি গ্রন্থাগারগুলির পুরানো সংস্করণ (একটি বড় স্ক্যাটার প্লটের জন্য 30 ডলার সেকেন্ডের পার্থক্য) সহ কোনও পুরানো কম্পিউটারে চলাকালীন পারফরম্যান্সের ব্যবধানটি আরও প্রশস্ত being
তদতিরিক্ত, মন্তব্যে উল্লিখিত হিসাবে, আপনি প্লটের সমমানের মান পেতে পারেন। তবে জ্ঞানুপ্লটের সাথে এটি করতে আপনাকে আরও ঘামতে হবে।
আপনি যদি নিজের মেশিনে চেষ্টা করে দেখতে চান তবে গ্রাফটি তৈরি করতে কোডটি এখানে রয়েছে :
from timeit import default_timer as timer
import matplotlib.pyplot as plt
import Gnuplot, Gnuplot.funcutils
import numpy as np
import sys
import os
def mPlotAndSave(x, y):
plt.scatter(x, y)
plt.savefig('mtmp.png')
plt.clf()
def gPlotAndSave(data, g):
g("set output 'gtmp.png'")
g.plot(data)
g("clear")
def cleanup():
try:
os.remove('gtmp.png')
except OSError:
pass
try:
os.remove('mtmp.png')
except OSError:
pass
begin = 2
end = 500000
step = 10000
numberOfPoints = range(begin, end, step)
n = len(numberOfPoints)
gnuplotTime = []
matplotlibTime = []
progressBarWidth = 30
g = Gnuplot.Gnuplot()
g("set terminal png size 640,480")
plt.clf()
for idx, val in enumerate(numberOfPoints):
sys.stdout.write('\r')
progress = (idx+1)*progressBarWidth/n
bar = "▕" + "▇"*progress + "▁"*(progressBarWidth-progress) + "▏" + str(idx) + "/" + str(n-1)
sys.stdout.write(bar)
sys.stdout.flush()
x = np.random.randint(sys.maxint, size=val)
y = np.random.randint(sys.maxint, size=val)
gdata = zip(x,y)
start = timer()
mPlotAndSave(x, y)
end = timer()
matplotlibTime.append(end - start)
start = timer()
gPlotAndSave(gdata, g)
end = timer()
gnuplotTime.append(end - start)
cleanup()
del g
sys.stdout.write('\n')
plt.plot(numberOfPoints, gnuplotTime, label="gnuplot")
plt.plot(numberOfPoints, matplotlibTime, label="matplotlib")
plt.legend(loc='upper right')
plt.xlabel('Number of points in the scatter graph')
plt.ylabel('Execution time (s)')
plt.savefig('execution.png')
plt.show()