در بخش سوم آموزش پایتون ، تا مبحث Lambda Function پیش رفتیم. در ادامه این نوشته در مورد numpy بحث را ادامه خواهیم داد.
Data processing with NumPy
import numpy as np
lst = [1,2,3]
np.array(lst)
mat = [[1,2,3], [4,5,6], [7,8,9]]
np.array(mat)
بدست آوردن ساختار آرایه:
np.array(mat).shape
arange
list(range(10))
np.arange(0,50,2)
Linspace
np.linspace(0,10,3)
np.linspace(0,100,30)
Random: creating random numbers
np.random.random(4)
np.random.random(4)*10
np.random.random((3,4))
# rand
np.random.rand(10)
np.random.rand(5,2)
np.random.rand(5,2,3)
تفاوتlinspcae و randint
در linspace فاصله ها به طور مساوی ایجاد میشوند ولی در randint به طور رندوم خواهد بود.
اگر بخواهیم منفی هم داشته باشیم:
# randn
np.random.randn(10)
np.random.randn(100)
randint
از این تابع برای تولید اعداد صحیح رندوم استفاده میشود:
np.random.randint(2,4)
np.random.randint(10,50)
np.random.randint(0,50,10)
تولید آرایه 3 در 4 تصادفی که مقادیر آن بین 0 تا 50 باشند و یا 5 در 10 که مقادیر آن کمتر از 50 باشند:
np.random.randint(0,50, (3,4))
np.random.randint(0,100, (5,10))
آرایه صفرها:
np.zeros(3)
np.zeros((3,2))
آرایه 5 در 5 از صفرها
np.zeros((5,5))
آرایه یک ها
np.ones(4)
np.ones((3,4))
ماتریس همانی:
np.eye(3,3)
np.eye(5,5)
np.eye(4,6)
آرایه Full
np.full((4,3), 7)
np.full((4,5), 100)
Working with Arrays : Array Attributes and Methods
آرایه تک بعدی:
arr = np.arange(25)
arr
result:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24])
arr.shape
دستورreshape :
arr.reshape(5,5)
result:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
آرایه تصادفی و سپس reshape آن:
arr_random.reshape(2,5)
result:
array([[12, 18, 11, 12, 37],
[29, 0, 5, 30, 22]])
sort
دیفالت آن این است که بر حسب ردیف سورت میکند .اما به axis=0 میتوان در راستای ستون سورت کرد.
b = np.random.randn(4,4)
b
b.sort()
b.sort(axis=0)
dtype
my_arr = np.array([1,2,3,4])
my_arr.dtype
ایجاد آرایه و تخصیص نوع داده:
my_arr = np.array([1,2,3,4], dtype='float64')
my_arr.dtype
max,min,argmax,argmin, mean(), median()
arr = np.random.randint(0,40,10)
arr
arr.max()
arr.min()
arr.argmax()
arr.argmin()
arr.mean()
حذف عنصر آرایه:
arr=[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr
np.delete(arr, 3)
#insert
np.insert(arr, 2, 99)
در راستای سطر، خط 2 را پاک کن:
arr3 = np.arange(0,25).reshape(5,5)
arr3
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
np.delete(arr3, [2], axis = 0)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
پاک کردن در راستای ستون ها:
np.delete(arr3, [2], axis = 1)
array([[ 0, 1, 3, 4],
[ 5, 6, 8, 9],
[10, 11, 13, 14],
[15, 16, 18, 19],
[20, 21, 23, 24]])
99 کردن سطر 2:
np.insert(arr2, 2, 99, axis = 0)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[99, 99, 99, 99, 99]])
concatenate, vstak, hstack
a = np.array([[1,2], [3,4]])
result:
array([[1, 2],
[3, 4]])
b = np.array([[5,6], [7,8]])
result:
array([[5, 6],
[7, 8]])
np.vstack((a,b))
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
np.hstack((a,b))
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
# concatenate
np.concatenate((a,b), axis = 0)
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
np.concatenate((a,b), axis = 1)
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
نکته:
تفاوت mead و median چیست؟ اولی میانگین و دومی به معنای میانه است.
توابع ریاضی در Numpy:
محاسبه مجذور:
import numpy as np
arr = np.arange(0,25)
np.sqrt(arr)
array([0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ,
3.16227766, 3.31662479, 3.46410162, 3.60555128, 3.74165739,
3.87298335, 4. , 4.12310563, 4.24264069, 4.35889894,
4.47213595, 4.58257569, 4.69041576, 4.79583152, 4.89897949])
محاسبه مربع:
np.square(arr)
محاسبه توان سوم:
np.power(arr, 3)
لگاریتم:
np.log(arr)
sin
np.sin(arr)
tan
np.tan(arr)
ضرب نظیر به نظیر
a = np.arange(1,6)
b = np.arange(2,7)
np.multiply(a,b) # peer to peer multiplication
ضرب ماتریسی:
np.matmul(a,b) # matric product
Numpy Indexing and Selection
arr = np.arange(15,25)
arr
arr[1:5]
arr[:7]
arr[2:]
indexing 2D arrays (matrices)
mat = np.random.randint(1,100, 25).reshape(5,5)
mat
array([[14, 28, 20, 61, 67],
[ 1, 44, 61, 54, 1],
[83, 61, 37, 7, 49],
[59, 37, 50, 59, 1],
[19, 31, 1, 60, 58]])
mat[1][3]
mat[1:3]
m = np.arange(0,100).reshape(10,10)
m
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
m[3:]
double slicing
m[3:,4:]
array([[34, 35, 36, 37, 38, 39],
[44, 45, 46, 47, 48, 49],
[54, 55, 56, 57, 58, 59],
[64, 65, 66, 67, 68, 69],
[74, 75, 76, 77, 78, 79],
[84, 85, 86, 87, 88, 89],
[94, 95, 96, 97, 98, 99]])
سطور 2تا 7 وستونهای 3 تا 6:
m[2:8, 3:7]
سطور 1 تا 7 و یک درمیان:
m[1:8:2]
سطور 2و4و6:
m[[2,4,6]]
Selection (Query)
arr = np.arange(1,21)
arr
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20])
arr>7
array([False, False, False, False, False, False, False, True, True,
True, True, True, True, True, True, True, True, True,
True, True])
arr[arr % 3 == 0]
arr[(arr % 3 == 0)& (arr % 5 == 0)]
arr[(arr % 3 == 0)| (arr % 5 == 0)]