آموزش کار با ماتریس(matrix) در پایتون

امیرحسین بیگدلو 4 ماه قبل

در این مقاله با ماتریس های پایتون آشنا شده و یاد میگیرید که چطور با استفاده از numpy و لیست های تودرتو پایتون ماتریس ایجاد کنید.

 

ماتریس یک ساختار داده دو بعدی است که در آن اعداد در ردیف ها و ستون ها مرتب می شوند. مانند تصویر زیر:

 

ماتریس در پایتون چیست

 

ماتریسی که در تصویر بالا مشاهده میکنید، 3x4 است به این معنی که 3 ردیف و 4 ستون دارد.

 

پایتون به صورت داخلی از ماتریس ها پشتیبانی نمیکند اما میتوانید از لیست های تودرتو برای ایجاد کردن یک نمونه از ماتریس استفاده کنید. به عنوان مثال:

A = [[1, 4, 5], 
    [-5, 8, 9]]

 

میتوانیم این لیست را به عنوان یک ماتریس 2x3 در نظر بگیریم:

 

ماتریس در پایتون

 

میتوانید از لیست های تودرتو به شکل زیر استفاده کنید:

A = [[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]]

print("A =", A) 
print("A[1] =", A[1])      # 2nd row
print("A[1][2] =", A[1][2])   # 3rd element of 2nd row
print("A[0][-1] =", A[0][-1])   # Last element of 1st Row

column = [];        # empty list
for row in A:
  column.append(row[2])   

print("3rd column =", column)

 

اگر کد بالا را اجرا کنید، خروجی به شکل زیر خواهد بود:

A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]
A[1] = [-5, 8, 9, 0]
A[1][2] = 9
A[0][-1] = 12
3rd column = [5, 9, 11]

 

استفاده از لیست های تودرتو به عنوان ماتریس برای کارهای محاسباتی ساده مناسب است، اما، راه بهتری برای کار با ماتریس ها در پایتون وجود دارد و آن استفاده از پکیج NumPy است.

 

ویدیو پیشنهادی: آموزش آرایه در پایتون

 

پکیج numpy

NumPy پکیجی برای محاسبات علمی است که از آرایه N بعدی قدرتمند پشتیبانی می کند. قبل از اینکه بتوانید از NumPy استفاده کنید، باید آن را نصب کنید. برای نصب numpy میتوانید از وبسایت رسمی آن کمک بگیرید یا میتوانید از آناکوندا پایتون استفاده کنید. بعد از نصب numpy میتوانید از آن استفاده کنید.

 

NumPy آرایه چند بعدی از اعداد که در واقع یک آبجکت است را ارائه می دهد. بیایید مثالی بزنیم:

import numpy as np
a = np.array([1, 2, 3])
print(a)               # Output: [1, 2, 3]
print(type(a))         # Output: <class 'numpy.ndarray'>

 

همانطور که دیدید، آرایه numpy با نام ndarray به معنی آرایه چند بعدی شناخته میشود.

 

مقاله پیشنهادی: بررسی خطای value error در پایتون

 

ایجاد کردن ماتریس numpy

برای ایجاد کردن یک آرایه یا ماتریس چند روش وجود دارد:

 

روش اول برای ایجاد کردن ماتریسی از اعداد استفاده میشود که میتوانید از تابع array استفاده کنید:

import numpy as np

A = np.array([[1, 2, 3], [3, 4, 5]])
print(A)

 

اگر کد بالا را اجرا کنید، خروجی به شکل زیر خواهد بود:

[[1 2 3]
 [3 4 5]]

 

روش دوم برای ایجاد کردن آرایه ای از اعداد صفر و یک استفاده میشود که میتوانید از توابع zeros و ones استفاده کنید:

import numpy as np

zeors_array = np.zeros( (2, 3) )
print(zeors_array)

'''
 Output:
 [[0. 0. 0.]
  [0. 0. 0.]]
'''

ones_array = np.ones( (1, 5), dtype=np.int32 ) // specifying dtype
print(ones_array)      # Output: [[1 1 1 1 1]]

 

روش سوم هم برای ایجاد کردن آرایه با ابعاد دلخواه است که میتوانید از توابع arange و shape استفاده کنید:

import numpy as np

A = np.arange(4)
print('A =', A)

B = np.arange(12).reshape(2, 6)
print('B =', B)

''' 
Output:
A = [0 1 2 3]
B = [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
'''

 

مقاله پیشنهادی: gunicorn پایتون چیست؟

 

جمع ماتریس ها در numpy

برای جمع کردن دو ماتریس با هم میتوانید از علامت  استفاده کنید. در این حالت آیتم های عددی آرایه با یک دیگر جمع میشوند:

import numpy as np

A = np.array([[2, 4], [5, -6]])
B = np.array([[9, -3], [3, 6]])
C = A + B      # element wise addition
print(C)

''' 
Output:
[[11  1]
 [ 8  0]]
 '''

 

 

ضرب ماتریس ها در numpy

برای ضرب دو ماتریس از تابع dot استفاده میکنیم:

import numpy as np

A = np.array([[3, 6, 7], [5, -3, 0]])
B = np.array([[1, 1], [2, 1], [3, -3]])
C = A.dot(B)
print(C)

''' 
Output:
[[ 36 -12]
 [ -1   2]]
'''

 

مقاله پیشنهادی: پیغام خطای EOF در پایتون چیست؟

 

جابجایی ردیف و ستون ماتریس ها در numpy

میتوانید از تابع transpose استفاده کنید تا جای ردیف و ستون را عوض کنید:

import numpy as np

A = np.array([[1, 1], [2, 1], [3, -3]])
print(A.transpose())

''' 
Output:
[[ 1  2  3]
 [ 1  1 -3]]
'''

 

 

دسترسی به المان های ماتریس

همانند لیست ها، می توانیم با استفاده از ایندکس به عناصر ماتریس دسترسی پیدا کنیم. بیایید با یک آرایه NumPy یک بعدی شروع کنیم:

import numpy as np
A = np.array([2, 4, 6, 8, 10])

print("A[0] =", A[0])     # First element     
print("A[2] =", A[2])     # Third element 
print("A[-1] =", A[-1])   # Last element     

 

اگر کد بالا را اجرا کنیم، خروجی به شکل زیر است:

A[0] = 2
A[2] = 6
A[-1] = 10 

 

حال، بیایید ببینیم چگونه می توانیم به عناصر یک آرایه دو بعدی (که اساسا یک ماتریس است) دسترسی داشته باشیم:

import numpy as np

A = np.array([[1, 4, 5, 12],
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])

#  First element of first row
print("A[0][0] =", A[0][0])  

# Third element of second row
print("A[1][2] =", A[1][2])

# Last element of last row
print("A[-1][-1] =", A[-1][-1])     

 

اگر کد بالا را اجرا کنیم، خروجی به شکل زیر است:

A[0][0] = 1
A[1][2] = 9
A[-1][-1] = 19

 

مقاله پیشنهادی: آموزش حذف آیتم از لیست های پایتون

 

دسترسی به ردیف های ماتریس

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

import numpy as np

A = np.array([[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])

print("A[0] =", A[0]) # First Row
print("A[2] =", A[2]) # Third Row
print("A[-1] =", A[-1]) # Last Row (3rd row in this case)

 

اگر کد بالا را اجرا کنیم، خروجی به شکل خواهد بود:

A[0] = [1, 4, 5, 12]
A[2] = [-6, 7, 11, 19]
A[-1] = [-6, 7, 11, 19]

 

 

دسترسی به ستون های ماتریس

سینتکس دسترسی به ستون های ماتریس کمی متفاوت است:

import numpy as np

A = np.array([[1, 4, 5, 12], 
    [-5, 8, 9, 0],
    [-6, 7, 11, 19]])

print("A[:,0] =",A[:,0]) # First Column
print("A[:,3] =", A[:,3]) # Fourth Column
print("A[:,-1] =", A[:,-1]) # Last Column (4th column in this case)

 

اگر کد بالا را اجرا کنیم، خروجی به شکل خواهد بود:

A[:,0] = [ 1 -5 -6]
A[:,3] = [12  0 19]
A[:,-1] = [12  0 19]

 

اگر نمی‌دانید این کد بالا چگونه کار می‌کند، بخش برش ماتریس این مقاله را بخوانید.

 

 

برش و تکه کردن ماتریس

برش یک آرایه NumPy یک بعدی شبیه به یک لیست است. به کد زیر دقت کنید:

import numpy as np
letters = np.array([1, 3, 5, 7, 9, 7, 5])

# 3rd to 5th elements
print(letters[2:5])        # Output: [5, 7, 9]

# 1st to 4th elements
print(letters[:-5])        # Output: [1, 3]   

# 6th to last elements
print(letters[5:])         # Output:[7, 5]

# 1st to last elements
print(letters[:])          # Output:[1, 3, 5, 7, 9, 7, 5]

# reversing a list
print(letters[::-1])          # Output:[5, 7, 9, 7, 5, 3, 1]

 

حالا بیایید ببیینم چطور میتوان یک ماتریس(آرایه چند بعدی) را تکه کرد:

import numpy as np

A = np.array([[1, 4, 5, 12, 14], 
    [-5, 8, 9, 0, 17],
    [-6, 7, 11, 19, 21]])

print(A[:2, :4])  # two rows, four columns

''' Output:
[[ 1  4  5 12]
 [-5  8  9  0]]
'''


print(A[:1,])  # first row, all columns

''' Output:
[[ 1  4  5 12 14]]
'''

print(A[:,2])  # all rows, second column

''' Output:
[ 5  9 11]
'''

print(A[:, 2:5])  # all rows, third to the fifth column

'''Output:
[[ 5 12 14]
 [ 9  0 17]
 [11 19 21]]
'''

 

همانطور که می بینید، استفاده از NumPy (به جای لیست های تودرتو) کار با ماتریس ها را بسیار آسان تر می کند. ما به شما پیشنهاد می کنیم پکیج NumPy را با جزئیات بررسی کنید، به خصوص اگر می خواهید از Python برای علم/تحلیل داده استفاده کنید.

مطالب مشابه



مونگارد