Học Numpy cơ bản đến nâng cao P1

Học Numpy cơ bản


Bài viết này sẽ giới thiệu và hướng dẫn các bạn cách sử dụng Numpy, một thư viện rất phổ biến trong Python để làm việc với ma trận. Mong nó sẽ giúp ích cho những ai đang có ý định học Numpy.

Numpy là gì ?

Numpy là một thư viện giúp chúng ta làm việc với mảng đa chiều hiệu quả hơn, nó giúp chúng ta tạo mảng đa chiều và cung cấp các công cụ tính toán để làm việc với chúng.

Đây là một package cơ bản và quan trọng dành cho scientific computing với Python. Nó bao gồm rất nhiều tính năng nổi bật, đặc biệt là:

  • Tạo mảng đa chiều dễ dàng
  • Các hàm tính toán về đại số tuyến tính, biến đổi Fourier, tạo mảng ngẫu nhiên

Numpy có thể lưu trữ nhiều kiểu dữ liệu, thích hợp với chức năng lưu trữ thông tin trong các bài toán phức tạp

Cách cài đặt Numpy

Chúng ta có thể cài đặt Numpy thông qua pip command bằng lệnh sau:

 pip install numpy 

Nếu bạn đang dùng Pycharm thì vào File/Settings/Project/Project Interprefer ấn dấu + để thêm nhé

Mảng trong Numpy

Mảng đa chiều là một trong những tính năng nổi bật của Numpy, có các tính chất sau:

  • Nó là một mảng nhiều chiều, có thể tưởng tượng như một ma trận, có cùng kiểu dữ liệu, chỉ số được xác định bằng một tuple gồm các số integer
  • Trong Numpy số chiều được gọi là axes, số axes chính là hạng của ma trận

Ví dụ:

[[1,2,3]
[4,5,6]]
ở đây axes = 2, kích thước (2,3)

Ví dụ tạo mảng Numpy trong python

# import thư viện numpy
import numpy as np

# khởi tạo
arr = np.array([[1,2,3],
                [4,5,6]])
# in ra kiểu dữ liệu của các phần tử
print(arr.dtype)

# in ra số chiều của mảng
print(arr.ndim)

# in ra shape của mảng
print(arr.shape)

# in ra số phần tử
print(arr.size)

Output:

int32
2
(2, 3)
6

Cách cách tạo mảng

  • Bạn có thể tạo mảng từ list, tuple sẵn có
  • Numpy cung cấp các hàm có thể tạo một mảng từ một size đã định với giá trị các phần tử định trước: np.zeros, np.ones, np.full, np.empty, …
  • Ngoài ra còn một số hàm hữu ích khác:
  • np.arrange : tạo một mảng có các giá trị được sắp xếp trong một khoảng nào đó
  • np.linspace : tạo một mảng gồm một số phần tử nằm trong khoảng đã xác định
  • np.reshape : thay đổi hình dạng mảng
# import thư viện numpy
import numpy as np

# Tạo mảng từ list có kiểu là float
a = np.array([[1, 2, 3], [4, 5, 6]], dtype = 'float')
print('\nMang tu list:\n', a)

# Tạo mảng từ một tuple
b = np.array((1 , 3, 2))
print('\nMang tu tuple:\n', b)

# Tạo một ma trận 3X4 với các phần tử bằng 0
c = np.zeros((3, 4))
print('\nMa tran 3X4 voi cac phan tu bang 0:\n', c)

# Tạo một ma trận 3X3 với các phần tử bằng 6
d = np.full((5, 3), 8, dtype = 'complex')
print ('\nMa tran 5X3 voi cac phan tu bang 8:\n', d)

# Tạo một ma trận 2X2 với các phần tử ngẫu nhiên
e = np.random.random((2, 2))
print ('\nMa tran ngau nhien 2X2 :\n', e)

# Tạo một mảng các phần tử từ 0 - 30 cách nhau 5 đơn vị
f = np.arange(0, 30, 5)
print ('\nMang co cac phan tu cach nhau 5 don vi:\n', f)

# Tạo mảng gồm 10 phần tử từ 0 - 9
g = np.linspace(0, 9, 10)
print ('\nMang gom 10 phan tu tu 0 - 9:\n', g)

# Chuyển ma trận 3X4 về 2X2X3
arr = np.array([[1, 2, 3, 4],
				[5, 2, 4, 2],
				[1, 2, 0, 1]])

newarr = arr.reshape(2, 2, 3)

print ('\nMang cu:\n', arr)
print ('Mang moi:\n', newarr)

# Dàn mảng
arr = np.array([[1, 2, 3], [4, 5, 6]])
flarr = arr.flatten()

print ('\nMang cu:\n', arr)
print ('mang moi:\n', flarr)

Output:

Mang tu list:
[[1. 2. 3.]
[4. 5. 6.]]
Mang tu tuple:
[1 3 2]
Ma tran 3X4 voi cac phan tu bang 0:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
Ma tran 5X3 voi cac phan tu bang 8:
[[8.+0.j 8.+0.j 8.+0.j]
[8.+0.j 8.+0.j 8.+0.j]
[8.+0.j 8.+0.j 8.+0.j]
[8.+0.j 8.+0.j 8.+0.j]
[8.+0.j 8.+0.j 8.+0.j]]
Ma tran ngau nhien 2X2 :
[[0.04548496 0.39935515]
[0.43917988 0.91034921]]
Mang co cac phan tu cach nhau 5 don vi:
[ 0 5 10 15 20 25]
Mang gom 10 phan tu tu 0 - 9:
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
Mang cu:
[[1 2 3 4]
[5 2 4 2]
[1 2 0 1]]
Mang moi:
[[[1 2 3]
[4 5 2]]
[[4 2 1]
[2 0 1]]]
Mang cu:
[[1 2 3]
[4 5 6]]
mang moi:
[1 2 3 4 5 6]

Chỉ Số Trong Mảng

Khi học Numpy, chúng ta hãy tưởng tượng nó như là một ma trận, giống như list, có rất nhiều các để truy xuất đến các phần tử trong mảng:

  • Slicing: giống như list, chúng ta có thể slice mảng của Numpy
  • Integer array indexing: có thể truyền chỉ số thông qua dạng list
  • Điều kiện: chỉ truy xuất các phần tử thỏa mãn điều kiện đề ra
# import thư viện numpy
import numpy as np

# Tạo mảng
arr = np.array([[-1, 2, 0, 4],
				[4, -0.5, 6, 0],
				[2.6, 0, 7, 8],
				[3, -7, 4, 2.0]])

# Slicing mảng
temp = arr[:2, ::2]
print ('\nCac phan tu dong 1, 2 cot 0 va 2: \n', temp)

# Truy xuất qua list
temp = arr[[0, 1, 2, 3], [3, 2, 1, 0]]
print ("\nCac phan tu o vi tri (0, 3), (1, 2), (2, 1),"
									"(3, 0):\n", temp)

# Truy xuất qua điều kiện
cond = arr > 0
temp = arr[cond]
print ("\nCac phan tu lon hon 0:\n", temp)
Cac phan tu dong 1, 2 cot 0 va 2: 
[[-1. 0.]
[ 4. 6.]]
Cac phan tu o vi tri (0, 3), (1, 2), (2, 1),(3, 0):
[4. 6. 0. 3.]
Cac phan tu lon hon 0:
[2. 4. 4. 6. 2.6 7. 8. 3. 4. 2. ]

Một số hàm hữu ích trong Numpy

# import thư viện numpy
import numpy as np

arr = np.array([[1, 5, 6],
				[4, 7, 2],
				[3, 1, 9]])

# Phần tử lớn nhất
print ("Phan tu lon nhat la: ", arr.max())
print ('Phan tu lon nhat cua cac dong la: ', arr.max(axis = 1))

# Phần tử nhỏ nhất
print ('Phan tu nho nhat cua cac dong la: ', arr.min(axis = 0))

# Tổng của các phần tử
print ('Tong cua cac phan tu la: ', arr.sum())

# Tổng tích lũy qua các dòng, tức là phần tử x(n+1)* = x(n+1)+x(n)
print ('Tong tich luy cac dong la: ', arr.cumsum(axis = 1))
Phan tu lon nhat la:  9
Phan tu lon nhat cua cac dong la: [6 7 9]
Phan tu nho nhat cua cac dong la: [1 1 2]
Tong cua cac phan tu la: 38
Tong tich luy cac dong la: [[ 1 6 12]
[ 4 11 13]
[ 3 4 13]]

Sắp xếp mảng trong Numpy

Chúng ta có thể sắp xếp mảng trong Numpy bằng method np.sort, hãy xem qua ví dụ dưới đây:

# import thư viện numpy
import numpy as np

a = np.array([[1, 4, 2],
              [3, 4, 6],
              [0, -1, 5]])

# Mảng đã được sắp xếp
print("Mang sau khi sap xep:\n", np.sort(a, axis=None))

# Sắp xếp theo dòng
print("Sap xep theo dong: \n", np.sort(a, axis=1))

# Sử dụng thuật toán sắp xếp khác
print("Sap xep theo cot su dung merge-sort:\n", np.sort(a, axis=0, kind='mergesort'))
Mang sau khi sap xep:
[-1 0 1 2 3 4 4 5 6]
Sap xep theo dong:
[[ 1 2 4]
[ 3 4 6]
[-1 0 5]]
Sap xep theo cot su dung merge-sort:
[[ 0 -1 2]
[ 1 4 5]
[ 3 4 6]]

Trong phần tiếp theo chúng ta sẽ tiếp tục học Numpy với một số hàm nâng cao hơn. Các bạn có thể tìm hiểu thêm tại trang chủ của numpy.

About tungaqhd

Đẹp trai, nhà giàu, hay nói phét.

View all posts by tungaqhd →

Leave a Reply

avatar
  Subscribe  
Notify of