وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

راهنمای تفریق ماتریس NumPy

0 42
زمان لازم برای مطالعه: 6 دقیقه


معرفی

تفریق دو ماتریس در NumPy یک کار بسیار رایج برای انجام است. ساده ترین راه برای تفریق دو ماتریس در NumPy استفاده از آن است - اپراتور، که ساده سازی است np.subtract() روش – روش خاص NumPy که برای تفریق آرایه ها و سایر اشیاء آرایه مانند مانند ماتریس ها طراحی شده است.

توجه داشته باشید: شیء آرایه مانند در NumPy به عنوان هر شیئی در نظر گرفته می شود که بتوان به آن ارسال کرد np.array() روش به طوری که یک شی ایجاد می کند که دارای ndarray نوع

در این راهنما، روش کم کردن دو ماتریس در NumPy با استفاده از هر دو را خواهید یافت - اپراتور و np.subtract() روش، زمان استفاده از هر یک از آنها، و درک عمیق تر از تمام تفاوت های ظریف np.subtract() روش در NumPy

روش تفریق دو ماتریس در NumPy

در جبر، دو ماتریس را فقط در صورتی می توان تفریق کرد که هر دو ماتریس را داشته باشند همان تعداد سطر و ستون، به این معنی که آنها هستند به همین شکل. بیایید فرض کنیم دو ماتریس یک شکل دارید که می خواهید آنها را کم کنید:

matrix1 = np.array(((2, 4, 0), (9, 1, 7)))
matrix2 = np.array(((2, 2, 1), (3, 5, 8)))

توجه داشته باشید: قبل از فراخوانی هر یک از متدهای NumPy، مانند np.array() روش برای اولین بار، شما باید import ماژول NumPy در پروژه شما با import numpy as np

همانطور که می بینید، دو ماتریس به یک شکل هستند، به این معنی که matrix1.shape برابر است با matrix2.shape – هر دو برابر هستند (2, 3). این واقعیت بسیار مهم است زیرا هر دو - اپراتور و np.subtract() در غیر این صورت روش آن طور که انتظار می رود رفتار نخواهد کرد.

توجه داشته باشید: این shape دارایی هر کدام ndarray شی (یک آرایه یا یک ماتریس) شکل آن شی را به شکلی ذخیره می کند (m, n)، جایی که m نشان دهنده تعداد ردیف ها و n تعداد ستون های یک ماتریس را نشان می دهد.

حالا می توانید آن دو ماتریس را کم کنید با استفاده از - اپراتور:

resultMatrix = matrix1 - matrix2

به همین سادگی! این خط است مساوی با خط زیر:

resultMatrix = np.subtract(matrix1, matrix2)

در هر دوی این موارد، resultMatrix دقیقاً همان مقدار را خواهد داشت که انتظار می رود:

( 0  2 -1)
( 6 -4 -1)

تفریق دو ماتریس از اشکال مختلف در NumPy

بخش قبل بصری ترین روش استفاده از تفریق در NumPy را نشان داد. قواعد جبر بیان می کند که شما می توانید دو ماتریس را فقط در صورتی کم کنید که شکل یکسانی داشته باشند، بنابراین بخش قبل تنها نوع تفریق ماتریس را توصیف می کند که از نظر ریاضی معتبر است.

با این حال، کتابخانه NumPy اجازه می دهد np.subtract() روشی برای کار حتی اگر ماتریس های آرگومان باشند یک شکل نیست. این کار را با کمک مکانیزمی به نام انجام می دهد صدا و سیما، که روش برخورد NumPy با آرایه های اشکال مختلف را در طول عملیات حسابی تعریف می کند. در نهایت، آنها از نظر شکل برابر می شوند و تفریق معمول انجام می شود.

پیشنهاد می‌کنیم بخوانید:  پیشوندهای رشته «u» و «r» و رشته‌های خام در پایتون

برای مثال، بیایید نگاهی به دو ماتریس زیر بیندازیم:

rowMatrix = np.array((1, 2, 3))
columnMatrix = np.array(((1), (2), (3)))

آن ماتریس ها قطعاً اشکال مختلفی دارند، rowMatrix.shape است (1, 3)، و columnMatrix.shape است (3, 1). این می تواند شما را گیج کند و فکر کنید که شما هستید نمی تواند تفریق آنها را در NumPy انجام دهید، اما این قطعاً ممکن است (البته، به طور غیر مستقیم، زیرا آنها به طور خودکار هستند پخش قبل از تفریق):

resultMatrix = np.subtract(rowMatrix, columnMatrix)

توجه داشته باشید: این resultMatrix اگر از آن استفاده کنید دقیقاً همان مقدار را خواهد داشت - اپراتور به جای np.subtract() روش

این resultMatrix ارزش زیر را خواهد داشت:

( 0  1  2)
(-1  0  1)
(-2 -1  0)

اگرچه، این نتیجه ممکن است کمی غیر منطقی به نظر برسد، اما اجازه دهید از آن برای نشان دادن مکانیسم پخش به زبان ساده استفاده کنیم.

پخش NumPy چیست؟

به منظور تفریق columnMatrix از جانب rowMatrix هر دو باید یک شکل باشند. از آنجایی که این دو ماتریس معیار ذکر شده را برآورده نمی‌کنند، مکانیسم پخش به وجود می‌آید. مطمئن می شود که کش آمدن هر دوی آنها دارای اشکال سازگار هستند. بنابراین، rowMatrix است کشیده شده است به طوری که ماتریس شکل را تشکیل می دهد (3, 3):

> Original `resultMatrix`:
(1 2 3)

> Broadcasted `resultMatrix`:
(1 2 3)
(1 2 3)
(1 2 3)

به روشی مشابه، columnMatrix کشیده می شود تا تشکیل شود (3, 3) ماتریس نیز:

> Original `resultMatrix`:
(1)
(2)
(3)

> Broadcasted `resultMatrix`:
(1 1 1)
(2 2 2)
(3 3 3)

اکنون که دو ماتریس اصلاح شده با یک شکل دارید، می توان تفریق را انجام داد روی آنها را ماتریس به دست آمده همان است resultMatrix از مثال بالا

(1 2 3)   (1 1 1)   ( 0  1  2)
(1 2 3) - (2 2 2) = (-1  0  1)
(1 2 3)   (3 3 3)   (-2 -1  0)

هشدار: پخش یک مکانیسم بسیار پیچیده تر از آنچه در اینجا توضیح داده شده است، بنابراین ما قویاً به شما توصیه می کنیم که با احتیاط از آن استفاده کنید یا تحقیقات بیشتری انجام دهید. روی موضوع. به عنوان مثال، ترکیب دیگری از دو شکل ماتریسی، a را ایجاد می کند ValueError زیرا آن اشکال را نمی توان به یک شکل پخش کرد.

چه موقع باید استفاده کرد np.subtract() روش به جای اپراتور

مستقر روی آنچه تاکنون دیده اید، می توانید نتیجه بگیرید که می توانید از هر دو استفاده کنید - و subtract() تقریباً هر زمان که بخواهید به جای یکدیگر. یعنی تقریبا درست است، اما مواردی وجود دارد که باید استفاده از آن را در نظر بگیرید np.subtract() روش به جای - اپراتور.

در اصل، - عملگر انتزاعی از np.subtract() روش. هنگام فراخوانی، - اپراتور عملاً با این شماره تماس خواهد گرفت np.subtract() با پارامترهای پیش فرض خود بنابراین، یک مورد استفاده که در آن می توانید استفاده از آن را در نظر بگیرید np.subtract() بالای - عملگر زمانی است که می خواهید رفتار پیش فرض از پیش تعریف شده تفریق را در NumPy تغییر دهید. ما نگاهی به چند استدلال می اندازیم که بازی کردن با آنها می تواند جالب باشد.

ابتدا، بیایید نگاهی به اعلامیه بیاندازیمnp.subtract() روش:

numpy.subtract(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True(, signature, extobj)) = <ufunc 'subtract'>

علاوه بر چند استدلال معمول و خود توضیحی، بخشی از اعلامیه که به احتمال زیاد توجه شما را جلب خواهد کرد <ufunc 'subtract'>، پس بیایید ابتدا مشخص کنیم که مخفف چیست. در NumPy، ufunc مخفف عملکرد جهانی، بنابراین این استدلال نشان می دهد که np.subtract() روش یک تابع جهانی است.

پیشنهاد می‌کنیم بخوانید:  الگوهای طراحی اختصاصی پایتون

توابع جهانی در NumPy عمل می کنند روی آرایه ها (به طور خاص ndarrays) به صورت عنصر به عنصر. آنها می توانند به طور موثر روی عناصر دوتایی تکرار کنند ndarrays و یک عملیات از پیش تعریف شده را انجام دهید روی عناصر مربوطه مثلا، np.subtract() دو عنصر متناظر را از دو کم خواهد کرد ndarrays. بنابراین، شما می توانید توابع جهانی را به عنوان توابع پایه و از پیش تعریف شده در نظر بگیرید که شما را قادر می سازد طیف گسترده ای از عملیات ریاضی پایه را انجام دهید. روی ndarrays.

اکنون می‌توانیم چند استدلال جالب دیگر را شرح دهیم:

  • x1 (ضروری)
    • اولین آرایه ورودی (یا سایر اشیاء آرایه مانند)
    • باید یا همان شکل باشد x2 یا قابل پخش به همان شکل x2
  • x2 (ضروری)
    • آرایه ورودی دوم (یا دیگر اشیاء آرایه مانند)
    • باید یا همان شکل باشد x1 یا قابل پخش به همان شکل x1
  • out (اختیاری)
    • اگر می خواهید مکانی را برای ذخیره نتیجه مشخص کنید استفاده می شود
    • اگر مشخص نشده باشد، شی جدید برای ذخیره نتیجه ایجاد می شود
    • اگر مشخص شود، باید a باشد ndarray شی یا چند تایی از ndarray و None اشیاء
    • شی مشخص شده باید به شکلی باشد که دو آرایه ورودی به آن پخش می شوند
  • where (اختیاری)
    • اگر می خواهید برخی از عناصر آرایه ورودی را مشخص کنید استفاده می شود روی که ufunc اجرا نخواهد شد
    • مقدار پیش فرض است True، بنابراین np.subtract() تمام عناصر مربوطه را از آن کم می کند x1 و x2
    • اگر می خواهید عناصر را کم نکنید روی یک موقعیت خاص در out آرایه، می توانید آرایه ای از مقادیر بولی را که شکلی مشابه آرایه دارد، ارسال کنید out آرایه، و مقدار را به False روی آن موقعیت ها
  • dtype (اختیاری)
    • برای تعیین نوع ماتریس نتیجه استفاده می شود
    • به طور پیش فرض، برابر با نوع آرایه های ورودی است

نتیجه

چه به دنبال راهی آسان برای تفریق دو ماتریس با استفاده از NumPy باشید و چه در تلاش برای یادآوری مفاهیم پیشرفته‌تر پیرامون np.subtract() روش، این راهنما شما را پوشش داده است. نکته اصلی این راهنما این بود که به شما پاسخ هر دوی این سوالات را بدهد.

در ابتدا، ما راه آسان و شهودی برای تفریق دو ماتریس در ماژول NumPy را پوشش داده‌ایم. در کنار آن، شباهت ها و تفاوت های بین آن ها را مورد بحث قرار داده ایم - اپراتور و np.subtract() روش. پس از آن، ما مفهوم پخش در NumPy را نشان دادیم، اما به شما توصیه می کنیم عمیق تر بگردید. روی موضوع پخش

در پایان، ما یک بررسی اجمالی دقیق از آن را به شما ارائه کرده ایم np.subtract() روش در NumPy، بنابراین می توانید رفتار پیش فرض آن را تغییر دهید تا برای موارد استفاده خاص تر مناسب تر شود.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-07 00:11:05

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید