আমি লক্ষ্য করেছি যে অজগরটিতে একটি সংখ্যার পরম মানের অনুসন্ধানের জন্য দুটি অনুরূপ চেহারা পদ্ধতি রয়েছে:
প্রথম
abs(-5)
দ্বিতীয়
import math
math.fabs(-5)
এই পদ্ধতিগুলির মধ্যে কীভাবে পার্থক্য রয়েছে?
আমি লক্ষ্য করেছি যে অজগরটিতে একটি সংখ্যার পরম মানের অনুসন্ধানের জন্য দুটি অনুরূপ চেহারা পদ্ধতি রয়েছে:
প্রথম
abs(-5)
দ্বিতীয়
import math
math.fabs(-5)
এই পদ্ধতিগুলির মধ্যে কীভাবে পার্থক্য রয়েছে?
উত্তর:
math.fabs()যদি এটি করতে পারে তবে তার যুক্তিটিকে ফ্লোটে রূপান্তরিত করে (যদি এটি না পারে তবে এটি একটি ব্যতিক্রম ছোঁড়ে)। এটি পরে নিখুঁত মান নেয় এবং ফলটিকে ভাসা হিসাবে ফিরিয়ে দেয়।
ভাসমান ছাড়াও, abs()পূর্ণসংখ্যা এবং জটিল সংখ্যাগুলির সাথেও কাজ করে। এটির রিটার্ন টাইপ তার যুক্তির ধরণের উপর নির্ভর করে।
In [7]: type(abs(-2))
Out[7]: int
In [8]: type(abs(-2.0))
Out[8]: float
In [9]: type(abs(3+4j))
Out[9]: float
In [10]: type(math.fabs(-2))
Out[10]: float
In [11]: type(math.fabs(-2.0))
Out[11]: float
In [12]: type(math.fabs(3+4j))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/npe/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))
TypeError: can't convert complex to float
fabsসর্বদা ভাসমান প্রকৃতির কারণে বেশি সময় নেওয়ার বিষয়ে একটি মন্তব্য যুক্ত করুন এবং আপনি সঠিক উত্তর পেয়েছেন!
__builtin__.abs()কীভাবে সফলভাবে প্রয়োগ করা যেতে পারে?
__abs__যাদু পদ্ধতিটি সংজ্ঞায়িত করে
সম্পাদনা করুন: @ অয়েক্সের পরামর্শ অনুসারে, গতির পার্থক্যের তুলনা করার একটি আরও ভাল (আরও নিখুঁত) উপায়:
In [1]: %timeit abs(5)
10000000 loops, best of 3: 86.5 ns per loop
In [2]: from math import fabs
In [3]: %timeit fabs(5)
10000000 loops, best of 3: 115 ns per loop
In [4]: %timeit abs(-5)
10000000 loops, best of 3: 88.3 ns per loop
In [5]: %timeit fabs(-5)
10000000 loops, best of 3: 114 ns per loop
In [6]: %timeit abs(5.0)
10000000 loops, best of 3: 92.5 ns per loop
In [7]: %timeit fabs(5.0)
10000000 loops, best of 3: 93.2 ns per loop
In [8]: %timeit abs(-5.0)
10000000 loops, best of 3: 91.8 ns per loop
In [9]: %timeit fabs(-5.0)
10000000 loops, best of 3: 91 ns per loop
সুতরাং এটি পূর্ণসংখ্যার জন্য abs()কেবল সামান্য গতির সুবিধা বলে মনে হচ্ছে fabs()। ভাসমানদের জন্য abs()এবং fabs()অনুরূপ গতি প্রদর্শন করুন।
@ অয়েক্স যা বলেছে তা ছাড়াও, আরও একটি বিষয় বিবেচনার জন্য গতির পার্থক্য:
In [1]: %timeit abs(-5)
10000000 loops, best of 3: 102 ns per loop
In [2]: import math
In [3]: %timeit math.fabs(-5)
10000000 loops, best of 3: 194 ns per loop
তাই abs()দ্রুত চেয়ে math.fabs()।
from math import fabsনিশ্চিতভাবে ব্যবহার করুন -5.0এবং উভয়ের জন্য চেষ্টা করুন ।
abs(): আর্গুমেন্ট অনুসারে নিখুঁত মান প্রদান করে অর্থাত্ যদি যুক্তিটি int হয় তবে এটি পূর্বাবস্থায় ফিরে আসে, যদি যুক্তিটি ভাসমান হয় তবে এটি ভাসা ফেরত দেয়। এছাড়াও এটি জটিল ভেরিয়েবলের উপরও কাজ করে, abs(a+bj)এছাড়াও কাজ করে এবং পরম মানের অর্থ প্রদান করেmath.sqrt(((a)**2)+((b)**2)
math.fabs(): এটি কেবল পূর্ণসংখ্যা বা ভাসমান মানগুলিতে কাজ করে। আর্গুমেন্টের ধরন যাই হোক না কেন সর্বদা নিরঙ্কুশ ফ্লোট মান প্রদান করে (জটিল সংখ্যা ব্যতীত)।
absকেবলমাত্র পূর্ণসংখ্যা এবং ভাসমানের চেয়ে অনেক বেশি কাজ করে এবং ফলাফলের ধরনটি সর্বদা আর্গুমেন্টের মতো হয় না , যেমনabs(3+4j)।