حساب ساده با ufunc (ufunc Simple Arithmetic)
در این صفحه با حساب ساده با ufunc در NumPy آشنا می شوی. یعنی با چند تابع آماده کار می کنی که جمع و تفریق و ضرب و تقسیم و چند عمل ساده دیگر را روی آرایه ها انجام می دهند.
حساب ساده با ufunc در NumPy یعنی چه؟
در منبع گفته شده می توانی مستقیماً از عملگرهای ریاضی مثل + و - و * و / روی آرایه های NumPy استفاده کنی. اما این بخش نسخه پیشرفته تر را توضیح می دهد که تابع هایی داریم که روی هر چیزی شبیه آرایه، مثل لیست و تاپل، کار می کنند.
در متن منبع همچنین گفته شده این تابع ها می توانند به صورت شرطی هم عمل کنند. یعنی با پارامتر where می گویی روی کدام جای آرایه عملیات انجام شود و روی کدام نشود.
نکته: حساب شرطی یعنی مثلاً بگویی «فقط جاهایی جمع کن که عدد زوج است».
جمع کردن با تابع add
تابع add() مقدارهای دو آرایه را با هم جمع می کند و نتیجه را در یک آرایه جدید برمی گرداند. در مثال منبع، دو آرایه پشت سر هم جمع می شوند.
import numpy as np
arr1 = np.array([10, 11, 12, 13, 14, 15])
arr2 = np.array([20, 21, 22, 23, 24, 25])
newarr = np.add(arr1, arr2)
print(newarr)
طبق توضیح منبع، خروجی این مثال [30 32 34 36 38 40] است که حاصل جمع 10+20 و 11+21 و 12+22 و به همین شکل بقیه است.
تفریق با تابع subtract
تابع subtract() عددهای یک آرایه را از آرایه دیگر کم می کند. نتیجه در یک آرایه جدید برگردانده می شود.
import numpy as np
arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([20, 21, 22, 23, 24, 25])
newarr = np.subtract(arr1, arr2)
print(newarr)
در منبع گفته شده خروجی این مثال برابر [-10 -1 8 17 26 35] است. یعنی 10−20 و 20−21 و 30−22 و به همین ترتیب.
ضرب با تابع multiply
تابع multiply() عددهای یک آرایه را در عددهای آرایه دیگر ضرب می کند. نتیجه هم در یک آرایه جدید قرار می گیرد.
import numpy as np
arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([20, 21, 22, 23, 24, 25])
newarr = np.multiply(arr1, arr2)
print(newarr)
منبع گفته خروجی این مثال [ 200 420 660 920 1200 1500] است. یعنی 10×20 و 20×21 و 30×22 و همین طور تا آخر.
تقسیم با تابع divide
تابع divide() عددهای یک آرایه را بر عددهای آرایه دیگر تقسیم می کند. نتیجه تقسیم ها در یک آرایه جدید برگردانده می شود.
import numpy as np
arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([3, 5, 10, 8, 2, 33])
newarr = np.divide(arr1, arr2)
print(newarr)
در منبع توضیح داده خروجی این مثال چیزی شبیه [3.33... 4. 3. 5. 25. 1.81...] است. این ها همان 10÷3 و 20÷5 و 30÷10 و بقیه تقسیم ها هستند.
توان با تابع power
تابع power() عددهای آرایه اول را به توان عددهای آرایه دوم می رساند. یعنی هر جفت عنصر را مثل پایه و توان در نظر می گیرد.
import numpy as np
arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([3, 5, 6, 8, 2, 33])
newarr = np.power(arr1, arr2)
print(newarr)
طبق توضیح منبع، نتیجه شامل عددهای خیلی بزرگ است. چون مثلاً 10 به توان 3 یعنی 10×10×10 و 20 به توان 5 یعنی 20 را پنج بار در خودش ضرب می کنی.
باقیمانده با تابع های mod و remainder
تابع های mod() و remainder() هر دو در NumPy یک کار انجام می دهند. یعنی باقیمانده تقسیم عددهای آرایه اول بر عددهای آرایه دوم را حساب می کنند و در آرایه جدید می ریزند.
import numpy as np
arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([3, 7, 9, 8, 2, 33])
newarr = np.mod(arr1, arr2)
print(newarr)
در منبع گفته شده خروجی این مثال [1 6 3 0 0 27] است. این همان باقیمانده های تقسیم مثل 10%3 و 20%7 و 30%9 و بقیه است.
اگر از تابع remainder() هم استفاده کنی، طبق منبع همان نتیجه را می گیری.
import numpy as np
arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([3, 7, 9, 8, 2, 33])
newarr = np.remainder(arr1, arr2)
print(newarr)
خارج قسمت و باقیمانده با تابع divmod
تابع divmod() هم خارج قسمت را می دهد و هم باقیمانده را. خروجی این تابع در منبع دو آرایه است: اولی خارج قسمت ها، دومی باقیمانده ها.
import numpy as np
arr1 = np.array([10, 20, 30, 40, 50, 60])
arr2 = np.array([3, 7, 9, 8, 2, 33])
newarr = np.divmod(arr1, arr2)
print(newarr)
در متن منبع نمونه خروجی نشان داده شده است. آرایه اول شامل خارج قسمت ها است؛ یعنی بخش صحیح 10÷3 و 20÷7 و 30÷9 و بقیه. آرایه دوم شامل همان باقیمانده هایی است که قبلاً با mod دیدیم.
قدر مطلق با تابع absolute
در انتهای منبع، دو تابع absolute() و abs() معرفی شده که هر دو قدرمطلق را حساب می کنند. قدرمطلق یعنی فاصله عدد از صفر، بدون توجه به علامت مثبت یا منفی.
گفته شده بهتر است از absolute() استفاده کنیم تا با تابع abs داخلی پایتون قاطی نشود.
import numpy as np
arr = np.array([-1, -2, 1, 2, 3, -4])
newarr = np.absolute(arr)
print(newarr)
در منبع گفته خروجی این مثال [1 2 1 2 3 4] است. یعنی همه عددها مثبت شده اند و فقط مقدارشان مانده است.
جمع بندی سریع حساب ساده با ufunc
برای مرور حساب ساده با ufunc در NumPy، این چند نکته کوتاه را نگه دار:
addبرای جمع،subtractبرای تفریق وmultiplyبرای ضرب دو آرایه استفاده می شود.divideبرای تقسیم، وpowerبرای توان های بزرگ عنصر به عنصر به کار می رود.modوremainderهر دو باقیمانده تقسیم را برمی گردانند.divmodهم خارج قسمت ها و هم باقیمانده ها را در دو آرایه جدا می دهد.- تابع
absoluteقدرمطلق را عنصر به عنصر حساب می کند و علامت منفی را حذف می کند.