جمع ها با ufunc (ufunc Summations)
در این صفحه می بینی جمع ها با ufunc در NumPy چه فرقی با جمع ساده دارند. یعنی فرق بین این که دو آرایه را عضو به عضو جمع کنیم، یا جمع را روی چند آرایه و چند عنصر انجام بدهیم.
تفاوت جمع ساده و جمع ها با ufunc
در منبع گفته شده جمع ساده بین دو آرگومان انجام می شود. اما جمع ها با ufunc روی چند عنصر یا چند آرایه انجام می شوند.
در مثال اول منبع، از تابع np.add برای جمع عضو به عضو دو آرایه استفاده شده است. این همان addition است.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 2, 3])
newarr = np.add(arr1, arr2)
print(newarr)
طبق متن منبع، خروجی این مثال [2 4 6] است؛ یعنی 1+1، 2+2، 3+3.
در مثال بعد، منبع از np.sum استفاده کرده است. این جا جمع روی همه عناصر دو آرایه انجام می شود؛ این همان summation است.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 2, 3])
newarr = np.sum([arr1, arr2])
print(newarr)
در متن منبع توضیح داده شده که خروجی این مثال 12 است. یعنی همه عددها با هم جمع شده اند.
اگر می خواهی جمع ها با ufunc در NumPy را در تصویر بزرگ تری ببینی، می توانی کنار این صفحه، مبحث لگاریتم ها با ufunc و مبحث حساب ساده با ufunc را هم بخوانی.
برای تمرین ساده روی همین مثال ها، این سه گام را انجام بده:
- آرایه های نمونه را مثل منبع در کد خودت بساز.
- یک بار با
np.addجمع عضو به عضو را اجرا کن. - بار بعد، با
np.sumجمع کلی را اجرا کن و خروجی ها را مقایسه کن.
جمع روی محور با پارامتر axis
در بخش Summation Over an Axis منبع، پارامتر axis معرفی شده است. طبق متن، اگر axis=1 بدهیم، NumPy جمع را روی هر آرایه جداگانه انجام می دهد.
در مثال منبع، دوباره از دو آرایه مثل قبل استفاده شده است، اما این بار axis=1 تنظیم شده است.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 2, 3])
newarr = np.sum([arr1, arr2], axis=1)
print(newarr)
در متن منبع گفته شده خروجی این مثال [6 6] است. یعنی جمع عناصر آرایه اول 6 شده و جمع عناصر آرایه دوم هم 6 شده است.
نکته: همین مثال برای درک جمع ها با ufunc روی محورها کافی است؛ منبع فقط همین حالت را نشان داده است.
جمع تجمعی با cumsum
در بخش Cummulative Sum منبع، جمع تجمعی معرفی شده است. جمع تجمعی یعنی عناصر را یکی یکی اضافه کنیم و هر مرحله را نگه داریم.
در متن منبع یک مثال کلی آمده است: برای آرایه [1, 2, 3, 4] جمع تجمعی برابر [1, 3, 6, 10] می شود.
در مثال اصلی، آرایه [1, 2, 3] استفاده شده است و از تابع np.cumsum برای گرفتن جمع تجمعی کمک گرفته شده است.
import numpy as np
arr = np.array([1, 2, 3])
newarr = np.cumsum(arr)
print(newarr)
طبق توضیح منبع، خروجی این مثال [1 3 6] است؛ یعنی 1، بعد 1+2، بعد 1+2+3.
برای حس بهتر نسبت به جمع ها با ufunc، این مراحل را در یک تمرین کوچک انجام بده:
- یک آرایه ساده مثل
[1, 2, 3, 4]بساز. - یک بار
np.sumرا روی کل آرایه اجرا کن. - بار دیگر،
np.cumsumرا صدا بزن و خروجی را با توضیح منبع مقایسه کن.
اگر بخواهی مسیر کامل مباحث ufunc را دنبال کنی، ترکیب صفحه جمع ها با ufunc در NumPy با صفحات مربوط به لگاریتم و حساب ساده، یک مسیر تمرینی خوب می سازد.
جمع بندی سریع جمع ها با ufunc
چند نکته کوتاه از متن منبع برای مرور نهایی:
- جمع ساده با
np.addعضو به عضو دو آرایه را جمع می کند. - تابع
np.sumجمع ها با ufunc را روی چند عنصر انجام می دهد. - با
axis=1جمع هر آرایه جداگانه محاسبه می شود. - تابع
np.cumsumجمع تجمعی را طبق توضیح منبع برمی گرداند. - همه مثال ها در منبع روی آرایه های کوچک عدد صحیح نشان داده شده اند.