ازگر: NumPy کے ساتھ ویکٹر ، میٹرکس اور اری۔

Python Vectors Matrices



اس سبق میں ، ہم ازگر میں NumPy لائبریری کا استعمال کرتے ہوئے ویکٹر ، میٹرکس اور صفوں کے ساتھ کھیلنے کے لیے کچھ صاف تجاویز اور چالیں دیکھیں گے۔ یہ سبق ایک بہت اچھا نقطہ آغاز ہے اگر آپ ڈیٹا سائنس کا آغاز کر رہے ہیں اور ان اجزاء کے کچھ تعارفی ریاضیاتی جائزہ کی ضرورت ہے اور ہم کوڈ میں NumPy کا استعمال کرتے ہوئے ان کے ساتھ کیسے کھیل سکتے ہیں۔

NumPy لائبریری ہمیں مختلف آپریشنز کرنے کی اجازت دیتی ہے جو کہ مشین سیکھنے اور ڈیٹا سائنس میں استعمال ہونے والے ڈیٹا سٹرکچر پر کئے جانے کی ضرورت ہے جیسے ویکٹر ، میٹرکس اور اری۔ ہم صرف NumPy کے ساتھ عام کام دکھائیں گے جو کہ مشین لرننگ پائپ لائنوں میں استعمال ہوتے ہیں۔ آخر میں ، براہ کرم نوٹ کریں کہ NumPy آپریشنز کو انجام دینے کا صرف ایک طریقہ ہے ، لہذا ، ہم جو ریاضی کے عمل دکھاتے ہیں وہ اس سبق کا بنیادی مرکز ہیں نہ کہ خود NumPy پیکیج۔ آو شروع کریں.







ویکٹر کیا ہے؟

گوگل کے مطابق ، ایک ویکٹر ایک مقدار ہے جس میں سمت اور وسعت ہوتی ہے ، خاص طور پر خلا میں ایک نقطہ کی پوزیشن کا تعین کرتے ہوئے دوسرے کے مقابلے میں۔





مشین لرننگ میں ویکٹر بہت اہم ہیں کیونکہ وہ نہ صرف وسعت بیان کرتے ہیں بلکہ خصوصیات کی سمت بھی بیان کرتے ہیں۔ ہم NumPy میں مندرجہ ذیل کوڈ کے ٹکڑوں کے ساتھ ایک ویکٹر بنا سکتے ہیں۔





درآمد بے حسیجیسا کہجیسے

row_vector = np.array([،،])
پرنٹ کریں(صف_ویکٹر)

مذکورہ کوڈ کے ٹکڑوں میں ، ہم نے ایک قطار ویکٹر بنایا۔ ہم کالم ویکٹر بھی بنا سکتے ہیں:

درآمد بے حسیجیسا کہجیسے

col_vector = np.array([[]،[]،[]])
پرنٹ کریں(col_vector)

میٹرکس بنانا۔

ایک میٹرکس کو صرف دو جہتی صف کے طور پر سمجھا جا سکتا ہے۔ ہم کثیر جہتی صف بنا کر NumPy کے ساتھ میٹرکس بنا سکتے ہیں:



میٹرکس = np.array([[،،]،[،،]،[،،]])
پرنٹ کریں(میٹرکس)

اگرچہ میٹرکس بالکل کثیر جہتی صف کی طرح ہے ، میٹرکس ڈیٹا ڈھانچے کی سفارش نہیں کی جاتی ہے۔ دو وجوہات کی وجہ سے:

  1. جب NumPy پیکیج کی بات آتی ہے تو سرنی معیاری ہوتی ہے۔
  2. NumPy کے ساتھ زیادہ تر آپریشن صفوں کو واپس کرتا ہے نہ کہ میٹرکس۔

ایک ویرل میٹرکس کا استعمال

یاد دلانے کے لئے ، ایک ویرل میٹرکس وہ ہے جس میں زیادہ تر اشیاء صفر ہوتی ہیں۔ اب ، ڈیٹا پروسیسنگ اور مشین لرننگ میں ایک عام منظر میٹرکس کی پروسیسنگ ہے جس میں زیادہ تر عناصر صفر ہیں۔ مثال کے طور پر ، ایک ایسے میٹرکس پر غور کریں جس کی قطاریں یوٹیوب پر ہر ویڈیو کی وضاحت کرتی ہیں اور کالم ہر رجسٹرڈ صارف کی نمائندگی کرتے ہیں۔ ہر قدر اس بات کی نمائندگی کرتی ہے کہ صارف نے کوئی ویڈیو دیکھی ہے یا نہیں۔ یقینا ، اس میٹرکس میں اقدار کی اکثریت صفر ہوگی۔ کی ویرل میٹرکس کے ساتھ فائدہ یہ ہے کہ یہ ان اقدار کو محفوظ نہیں کرتا جو صفر ہیں۔ اس کے نتیجے میں ایک بہت بڑا کمپیوٹیشنل فائدہ اور اسٹوریج کی اصلاح بھی ہوتی ہے۔

آئیے یہاں ایک چنگاری میٹرکس بنائیں:

scipy درآمد سے کم

original_matrix = np.array([[،،]،[،،]،[،،]])
sparse_matrix = sparse.csr_matrix(original_matrix)
پرنٹ کریں(sparse_matrix)

کوڈ کیسے کام کرتا ہے اس کو سمجھنے کے لیے ، ہم یہاں آؤٹ پٹ دیکھیں گے:

مذکورہ کوڈ میں ، ہم نے ایک بنانے کے لیے NumPy کا فنکشن استعمال کیا۔ کمپریسڈ ویرل قطار۔ میٹرکس جہاں صفر پر مبنی انڈیکس کا استعمال کرتے ہوئے غیر صفر عناصر کی نمائندگی کی جاتی ہے۔ مختلف قسم کے ویرل میٹرکس ہیں ، جیسے:

  • کمپریسڈ ویرل کالم۔
  • فہرستوں کی فہرست۔
  • چابیاں کی لغت۔

ہم یہاں دوسرے ویرل میٹرکس میں غوطہ نہیں لگائیں گے لیکن جانتے ہیں کہ ان میں سے ہر ایک کا استعمال مخصوص ہے اور کسی کو 'بہترین' نہیں کہا جا سکتا۔

تمام ویکٹر عناصر پر آپریشنز کا اطلاق۔

یہ ایک عام منظر ہے جب ہمیں ایک سے زیادہ ویکٹر عناصر پر مشترکہ آپریشن لگانے کی ضرورت ہوتی ہے۔ یہ لیمبڈا کی وضاحت کرکے اور پھر ویکٹرائزنگ کرکے کیا جاسکتا ہے۔ آئیے اسی کے لیے کچھ کوڈ کا ٹکڑا دیکھتے ہیں:

میٹرکس = np.array([
[،،]،
[،،]،
[،،]])

mul_5 = لیمبڈا x: x۔*
vectorized_mul_5 = np.vectorize۔(mul_5)

vectorized_mul_5(میٹرکس)

کوڈ کیسے کام کرتا ہے اس کو سمجھنے کے لیے ، ہم یہاں آؤٹ پٹ دیکھیں گے:

مذکورہ کوڈ کے ٹکڑوں میں ، ہم نے ویکٹرائز فنکشن کا استعمال کیا جو کہ NumPy لائبریری کا حصہ ہے ، ایک سادہ لیمبڈا ڈیفینیشن کو ایک فنکشن میں تبدیل کرنے کے لیے جو ویکٹر کے ہر عنصر کو پروسس کر سکتا ہے۔ یہ نوٹ کرنا ضروری ہے کہ ویکٹرائز ہے۔ عناصر پر صرف ایک لوپ اور اس پروگرام کی کارکردگی پر کوئی اثر نہیں پڑتا۔ NumPy بھی اجازت دیتا ہے۔ براڈ کاسٹننگ ، جس کا مطلب یہ ہے کہ مذکورہ پیچیدہ کوڈ کے بجائے ، ہم آسانی سے کر سکتے تھے:

میٹرکس*

اور نتیجہ بالکل ویسا ہی ہوتا۔ میں پہلے پیچیدہ حصہ دکھانا چاہتا تھا ، ورنہ آپ اس حصے کو چھوڑ دیتے!

مطلب ، تغیر اور معیاری انحراف۔

NumPy کے ساتھ ، ویکٹر پر وضاحتی اعدادوشمار سے متعلق آپریشن کرنا آسان ہے۔ ایک ویکٹر کا مطلب اس طرح شمار کیا جا سکتا ہے:

np. مطلب(میٹرکس)

ویکٹر کے مختلف ہونے کا حساب اس طرح لگایا جا سکتا ہے:

np.var(میٹرکس)

ویکٹر کے معیاری انحراف کا حساب لگایا جا سکتا ہے:

مثال کے طور پر std(میٹرکس)

دیئے گئے میٹرکس پر مندرجہ بالا کمانڈز کی آؤٹ پٹ یہاں دی گئی ہے:

ایک میٹرکس کو منتقل کرنا

ٹرانسپوزنگ ایک بہت ہی عام آپریشن ہے جس کے بارے میں آپ جب بھی میٹرکس سے گھیرے جائیں گے سنیں گے۔ ٹرانسمیشن ایک میٹرکس کے کالم اور قطار کی اقدار کو تبدیل کرنے کا ایک طریقہ ہے۔ براہ کرم نوٹ کریں کہ a ویکٹر منتقل نہیں کیا جا سکتا بطور ویکٹر صرف اقدار کا مجموعہ ہے ان اقدار کو قطاروں اور کالموں میں درجہ بندی کیے بغیر۔ براہ کرم نوٹ کریں کہ قطار ویکٹر کو کالم ویکٹر میں تبدیل کرنا تبدیل نہیں ہو رہا ہے (لکیری الجبرا کی تعریفوں پر مبنی ہے ، جو اس سبق کے دائرہ کار سے باہر ہے)۔

ابھی کے لئے ، ہم صرف ایک میٹرکس کو منتقل کرکے امن پائیں گے۔ NumPy کے ساتھ میٹرکس کی منتقلی تک رسائی بہت آسان ہے۔

matrix.T

دیئے گئے میٹرکس پر مندرجہ بالا کمانڈ کی پیداوار یہاں دی گئی ہے:

اسے کالم ویکٹر میں تبدیل کرنے کے لیے قطار ویکٹر پر بھی یہی آپریشن کیا جا سکتا ہے۔

ایک میٹرکس کو چپٹا کرنا۔

ہم ایک میٹرکس کو ایک جہتی صف میں تبدیل کر سکتے ہیں اگر ہم اس کے عناصر کو لکیری انداز میں پروسس کرنا چاہتے ہیں۔ یہ درج ذیل کوڈ کے ٹکڑوں سے کیا جا سکتا ہے۔

matrix.flatten()

دیئے گئے میٹرکس پر مندرجہ بالا کمانڈ کی پیداوار یہاں دی گئی ہے:

نوٹ کریں کہ فلیٹ میٹرکس ایک جہتی صف ہے ، صرف فیشن میں لکیری۔

Eigenvalues ​​اور Eigenvectors کا حساب لگانا

ایجین ویکٹر مشین لرننگ پیکجوں میں عام طور پر استعمال ہوتے ہیں۔ لہذا ، جب ایک لکیری ٹرانسفارمیشن فنکشن کو میٹرکس کے طور پر پیش کیا جاتا ہے ، تو X ، Eigenvectors وہ ویکٹر ہوتے ہیں جو صرف ویکٹر کے پیمانے میں بدلتے ہیں لیکن اس کی سمت نہیں۔ ہم یہ کہہ سکتے ہیں:

Xv = γv

یہاں ، X مربع میٹرکس ہے اور γ Eigenvalues ​​پر مشتمل ہے۔ نیز ، v میں Eigenvectors شامل ہیں۔ NumPy کے ساتھ ، Eigenvalues ​​اور Eigenvectors کا حساب لگانا آسان ہے۔ یہاں کوڈ کا ٹکڑا ہے جہاں ہم اسی کا مظاہرہ کرتے ہیں:

evalues ​​، evectors = np.linalg.eig(میٹرکس)

دیئے گئے میٹرکس پر مندرجہ بالا کمانڈ کی پیداوار یہاں دی گئی ہے:

ویکٹر کی ڈاٹ پروڈکٹس۔

ویکٹر کی ڈاٹ پروڈکٹ 2 ویکٹر کو ضرب دینے کا ایک طریقہ ہے۔ یہ آپ کے بارے میں بتاتا ہے۔ کتنے ویکٹر ایک ہی سمت میں ہیں۔ ، کراس پروڈکٹ کے برعکس جو آپ کو اس کے برعکس بتاتا ہے ، ویکٹر ایک ہی سمت میں کتنے کم ہیں (جسے آرتھوگونل کہتے ہیں)۔ ہم دو ویکٹر کی ڈاٹ پروڈکٹ کا حساب لگاسکتے ہیں جیسا کہ یہاں کوڈ کے ٹکڑوں میں دیا گیا ہے۔

a = np.array([،،])
b = np.array([2. 3۔،پندرہ،])

np.dot(a ، b)

دی گئی صفوں پر مندرجہ بالا کمانڈ کی پیداوار یہاں دی گئی ہے:

میٹرکس کو شامل کرنا ، کم کرنا اور ضرب دینا۔

متعدد میٹرکس کو شامل کرنا اور کم کرنا میٹرکس میں بالکل سیدھا آپریشن ہے۔ اس کے کرنے کے دو طریقے ہیں۔ آئیے ان آپریشنز کو انجام دینے کے لیے کوڈ کا ٹکڑا دیکھیں۔ اس سادہ رکھنے کے مقصد کے لیے ، ہم ایک ہی میٹرکس کو دو بار استعمال کریں گے:

np.add(میٹرکس ، میٹرکس)

اگلا ، دو میٹرکس کو منہا کیا جاسکتا ہے:

np.subtract(میٹرکس ، میٹرکس)

دیئے گئے میٹرکس پر مندرجہ بالا کمانڈ کی پیداوار یہاں دی گئی ہے:

جیسا کہ توقع کی جاتی ہے ، میٹرکس کے ہر عنصر کو متعلقہ عنصر کے ساتھ شامل/گھٹا دیا جاتا ہے۔ میٹرکس کو ضرب دینا ڈاٹ پروڈکٹ کو ڈھونڈنے کے مترادف ہے جیسا کہ ہم نے پہلے کیا:

np.dot(میٹرکس ، میٹرکس)

مندرجہ بالا کوڈ دو میٹرکس کی حقیقی ضرب قیمت پائے گا ، جیسا کہ دیا گیا ہے:

میٹرکس*میٹرکس

دیئے گئے میٹرکس پر مندرجہ بالا کمانڈ کی پیداوار یہاں دی گئی ہے:

نتیجہ

اس سبق میں ، ہم ویکٹر ، میٹرکس اور اری سے متعلق بہت ساری ریاضیاتی کارروائیوں سے گزرے جو عام طور پر ڈیٹا پروسیسنگ ، وضاحتی اعدادوشمار اور ڈیٹا سائنس میں استعمال ہوتے ہیں۔ یہ ایک فوری سبق تھا جس میں وسیع اقسام کے تصورات کے صرف عام اور سب سے اہم حصوں کا احاطہ کیا گیا تھا لیکن ان آپریشنز کو اس بارے میں بہت اچھا اندازہ ہونا چاہیے کہ ان ڈیٹا ڈھانچے سے نمٹنے کے دوران تمام آپریشنز کیا کیے جا سکتے ہیں۔

براہ کرم ٹویٹر پر سبق کے بارے میں اپنی رائے آزادانہ طور پر شیئر کریں۔ ux لینکس ہنٹ۔ اور bsbmaggarwal (یہ میں ہوں!)