لگاریتم ها با ufunc (ufunc Logs)
در این صفحه با لگاریتم ها با ufunc در NumPy آشنا می شوی. یعنی می بینی چطور روی آرایه ها log پایه 2، 10 و e بگیریم و حتی برای هر پایه دلخواه، یک ufunc بسازیم.
لگاریتم ها با ufunc در NumPy چیست؟
در منبع گفته شده NumPy تابع هایی برای لگاریتم پایه 2، e و 10 دارد. همچنین نوشته می توانیم با ساخت یک ufunc سفارشی، برای هر پایه دلخواه هم لگاریتم بگیریم.
نکته مهم منبع این است که اگر لگاریتم روی عددی تعریف نشود، مقدار inf یا -inf داخل آرایه قرار می گیرد.
اگر می خواهی کل ماجرای ufunc را مرور کنی، صفحه مقدمه ufunc در NumPy جای خوبی است. همچنین برای مقایسه، می توانی صفحه گرد کردن اعشار با ufunc را هم ببینی.
برای تمرین لگاریتم ها با ufunc در NumPy، این سه مرحله را انجام بده:
- در کد خودت NumPy را ایمپورت کن و یک آرایه بساز.
- روی همان آرایه، تابع های
log2،log10وlogرا اجرا کن. - در پایان، یک ufunc با
frompyfuncبساز و لگاریتم هر پایه را تست کن.
لگاریتم پایه 2 با log2
در بخش Log at Base 2 منبع، از تابع log2() استفاده شده است. این تابع لگاریتم پایه 2 هر عنصر آرایه را حساب می کند.
در مثال منبع از np.arange(1, 10) استفاده شده که عددهای 1 تا 9 را می سازد.
import numpy as np
arr = np.arange(1, 10)
print(np.log2(arr))
نکته: خود منبع توضیح داده که arange(1, 10) عددهای صحیح از 1 (شامل) تا 10 (غیرشامل) را برمی گرداند.
لگاریتم پایه 10 با log10
در بخش Log at Base 10 منبع، تابع log10() معرفی شده است. این تابع لگاریتم پایه 10 هر عدد در آرایه را حساب می کند.
باز هم از همان آرایه 1 تا 9 استفاده شده تا خروجی ها را ببینیم.
import numpy as np
arr = np.arange(1, 10)
print(np.log10(arr))
این مثال دقیقاً همان ساختار مثال پایه 2 را دارد، فقط تابع log10 استفاده شده است.
لگاریتم طبیعی (پایه e) با log
در بخش Natural Log منبع، تابع log() برای لگاریتم پایه e معرفی شده است. این همان لگاریتم طبیعی است.
مثل مثال های قبلی، دوباره آرایه 1 تا 9 ساخته شده و روی آن np.log اجرا شده است.
import numpy as np
arr = np.arange(1, 10)
print(np.log(arr))
به این ترتیب، در یک نگاه می توانی تفاوت خروجی های log2، log10 و log را روی یک آرایه ببینی.
لگاریتم در هر پایه با ufunc سفارشی
در بخش Log at Any Base منبع، گفته شده NumPy مستقیم تابعی برای هر پایه دلخواه ندارد. برای همین از frompyfunc() همراه با math.log() استفاده می شود.
در مثال منبع، یک ufunc جدید به نام nplog ساخته شده است. این تابع دو ورودی می گیرد: عدد و پایه، و یک خروجی برمی گرداند.
from math import log
import numpy as np
nplog = np.frompyfunc(log, 2, 1)
print(nplog(100, 15))
طبق توضیح منبع، این روش اجازه می دهد لگاریتم هر پایه را با یک ufunc روی آرایه ها حساب کنیم.
هشدار: منبع گفته اگر برای بعضی عناصر آرایه نتوان لگاریتم را حساب کرد، مقدار inf یا -inf در آن خانه ها قرار می گیرد. پس بهتر است ورودی ها را کنترل کنی.
اگر بخواهی نام این مبحث را دقیق ببینی، می توانی در لینک داخلی هم از عبارت لگاریتم ها با ufunc در NumPy استفاده کنی تا کاملاً در ذهن بماند.
جمع بندی سریع لگاریتم ها با ufunc
در پایان، چند نکته کوتاه از منبع را مرور کنیم:
log2برای لگاریتم پایه 2 روی آرایه ها استفاده شده است.log10در منبع برای لگاریتم پایه 10 معرفی شده است.logهمان لگاریتم طبیعی با پایه e است.- با
frompyfuncوmath.logمی توان ufunc لگاریتم هر پایه را ساخت. - اگر لگاریتم قابل محاسبه نباشد، طبق متن منبع مقدار
infیا-infدر آرایه قرار می گیرد.