TỔNG QUAN VỀ NUMPY
TỔNG QUAN VỀ NumPy
1.Giới thiệu về thư viện NumPy
a. NumPy là gì?
NumPy là một thư viện mã nguồn mở miễn phí được sử dụng phổ biến trong ngôn ngữ Python. Kể từ khi tác giả Travis Oliphant tạo ra vào năm 2005, NumPy luôn được các coder trên thế giới ưa chuộng nhờ sự tiện lợi và các tính năng vượt trội so với các kiểu dữ liệu tập hợp(collection) có sẵn.
Là một thư viện đặc biệt mạnh về kiểu dữ liệu mảng, NumPy cung cấp các hàm và object để hỗ trợ làm việc với miền đại số tuyến tính, các ma trận và biến đổi Fourier.
NumPy là viết tắt của Numerical Python.
Các bạn có thể đọc thêm thông tin về NumPy tại: https://numpy.org/
b. Tại sao lại sử dụng NumPy
Ở Python, chúng ta đã có sẵn kiểu dữ liệu thông dụng khi làm việc với mảng, đó là list. Nhưng đôi khi, tốc độ xử lý của Python lại không đáp ứng được nhu cầu của chúng ta.
Với sự ưu việt trong tính toán của NumPy, chúng ta có thể làm việc nhanh gấp 50 lần so với kiểu dữ liệu list truyền thống, sự chênh lệch càng cao khi chúng ta phải làm với các bộ dữ liệu lớn và phức tạp.
Đối với các lập trình viên, sự quản lý về mặt bộ nhớ và tài nguyên là rất quan trọng. Thư viện NumPy cung cấp đối tượng mảng ndarray được lưu trữ liên tục trong bộ nhớ, khác hẳn với kiểu dữ liệu list thông thường, do đó quá trình tham chiếu và làm việc với mảng được giảm bớt thời gian xử lí. Ngoài ra, không chỉ viết bằng ngôn ngữ Python, một phần lớn các hàm của NumPy còn được viết bằng ngôn ngữ C và C++ – là các ngôn ngữ rất chặt chẽ về quản lý tài nguyên và tốc độ xử lí.
Mã nguồn của NumPy được đặt tại: https://github.com/numpy/numpy
2.Cài đặt NumPy
a. Cài đặt môi trường Python
NumPy là một thư viện được xử dụng trong môi trường Python, do đó, để sử dụng được NumPy, trước tiên các bạn cần phải cài đặt môi trường Python cho thiết bị của mình.
Truy cập: https://www.python.org/
Di chuột vào mục Downloads và chọn phiên bản mới nhất(ở thời điểm mình cài đặt là phiên bản 3.10.7).

Sau đó trang web sẽ tự động chọn cho bản phiên bản tương thích với thiết bị của bạn, như ví dụ trên là phiên bản của CPU AMD với hệ điều hành 64-bit.
Sau khi tải xuống hoàn thành, bạn khởi chạy file đã tải và thực hiện cài đặt Python.
Bạn có thể kiểm tra xem máy mình đã cài đặt thành công môi trường Python chưa bằng cách mở Command Prompt và gõ lệnh python –version, nếu kết quả trả về là phiên bản của bạn thì bạn đã cài đặt thành công.
b. Cài đặt thư viện NumPy
Chúng ta sẽ tiến hành cài đặt thư viện Numpy qua trình quản lý thư viện Python Preferred Installer Program(PIP).
Đối với các phiên bản Python từ 3.4 trở lên, trình quản lý thư viện PIP đã được cài đặt sẵn theo môi trường Python, do vậy, chúng ta có thể tiến hành cài đặt NumPy luôn. Tuy nhiên, đối với các phiên bản Python trước đó, chúng ta cần cài đặt PIP để tiếp tục thực hiện cài đặt NumPy.
Cách cài đặt PIP đối với phiên bản trước Python 3.4, các bạn xem tại : https://pip.pypa.io/en/stable/installation/
Để cài đặt thư viện NumPy qua trình quản lý thư viện PIP, rất đơn giản, bạn chỉ cần bật Command Prompt lên và gõ lệnh pip install numpy và chờ cho thư viện NumPy được cài đặt.

Để kiểm tra xem bạn đã cài đặt thành công chưa, hãy gõ lệnh pip show numpy và nếu thành công thì thông tin về vị trí, phiên bản,… của thư viện NumPy sẽ hiện ra.

3.Một số ứng dụng của NumPy
Để bắt đầu làm việc với NumPy, bạn cần import thư viện vào chương trình của bạn.
import numpy
Sau đây mình sẽ giới thiệu một số ứng dụng đơn giản của NumPy.
Khởi tạo mảng:
import numpy
arr=numpy.array([1,2,3,4,5])
print(type(arr))
print(arr)
Output:
<class 'numpy.ndarray'>
[1 2 3 4 5]
Như chúng ta thấy, kiểu của biến arr được định nghĩa là đối tượng ndarray thuộc thư viện NumPy
Thực hiện các phép toán với mảng:
import numpy
arr1=numpy.array([14,2,3])
arr2=numpy.array([3,22,5])
print(arr1+arr2) # cộng các phần tử tương ứng của 2 mảng
print(arr1-arr2) # trừ các phần tử tương ứng của 2 mảng
arr=numpy.array([[1,2,3],
[4,5,6],
[7,8,9]]) # tạo mảng 2 chiều
print(arr)
Output:
[17 24 8]
[ 11 -20 -2]
[[1 2 3]
[4 5 6]
[7 8 9]]
Ngoài ra, chúng ta còn có thể làm việc với mảng như với vector và ma trận:
import numpy
vct=numpy.array([14,2,3]) # tạo vector
arr=numpy.array([[1,2,3],
[4,5,6],
[7,8,9]]) # tạo ma trận 3x3
print(arr.shape) # in kích thước ma trận
print(arr + vct) # cộng vector vào các hàng ma trận
print(numpy.dot(arr,vct)) # nhân ma trận với vector
Output:
(3, 3)
[[15 4 6]
[18 7 9]
[21 10 12]]
[ 27 84 141]
Tính giá trị trung bình, độ lệch chuẩn theo cột, hàng:
Tham số axis được truyền vào để tính theo cột với giá trị 0 và hàng với giá trị 1, giá trị mặc định của nó là None, tức là sẽ tính trên cả mảng.
import numpy
arr=numpy.array([[1,2],
[4,5]]) # tạo ma trận 2x2
print(numpy.mean(arr)) # tính trung bình cộng cả mảng
print(numpy.mean(arr, axis=1)) # tính trung bình cộng theo hàng
print(numpy.std(arr, axis=0)) # tính độ lệch chuẩn theo cột
print(numpy.std(arr, axis=1)) # tính độ lệch chuẩn theo hàng
Output:
3.0
[1.5 4.5]
[1.5 1.5]
[0.5 0.5]
NumPy còn có khả năng broadcasting rất tốt, nói một cách đơn giản dễ hiểu thì đó là chức năng tự động điều chỉnh kích thước của các biến để chúng có thể tương tác với nhau.
import numpy
A = numpy.array([[11, 22, 33], #mảng kích thước 2x3
[10, 20, 30]])
print(A)
b = 4
C = A + b
print(C)
Output:
[[11 22 33]
[10 20 30]]
[[15 26 37]
[14 24 34]]
Như các bạn biết, không hề tồn tại phép toán cộng một số với ma trận, tuy nhiên nhờ quá trình broadcasting của NumPy trong khi tính toán, biến b đã được biến đổi kích thước để có thể thực hiện phép toán cộng vào từng phần tử của ma trận A.
Hay dưới đây là ví dụ của cộng ma trận với vector:
import numpy
a = numpy.array([[11, 22], #mảng kích thước 2x2
[10, 20]])
b = numpy.array([1,2])
C = a + b #cộng mảng với vector
print(C)
Output:
[[12 24]
[11 22]]
Vector b trong quá trình tính toán đã được biến đổi, cụ thể là thành một ma trận 2×2 để có thể thực hiện phép cộng ma trận.
Để hiểu rõ hơn về broadcasting, các bạn có thể xem tại: https://numpy.org/doc/stable/user/basics.broadcasting.html?highlight=broadcasting
Đặc biệt, trong Numpy còn có một module cực kì hữu ích cho các bạn khi học tập hay làm việc với đại số tuyến tính, đó chính là module Linear Algebra, hay còn được viết là numpy.linalg .
Module trên cung cấp các hàm rất hữu dụng như tính định thức, tìm hạng, tính nghịch đảo của ma trận, giải hệ phương trình tuyến tính,…
import numpy
A = numpy.array([[1.0, 0, 1],
[0, 2, 0],
[0, 3, 7]])
B = numpy.array([2.0,2,10])
print("hạng của A:", numpy.linalg.matrix_rank(A))
print("định thức của A:{:.4f}".format(numpy.linalg.det(A)))
print("nghịch đảo A:", numpy.linalg.inv(A))
print("luỹ thừa bậc 3 của A:",numpy.linalg.matrix_power(A, 3))
print("giải phương trình AX=B",numpy.linalg.solve(A,B))
Output:
hạng của A: 3
định thức của A:14.0000
nghịch đảo A: [[ 1. 0.21428571 -0.14285714]
[ 0. 0.5 0. ]
[-0. -0.21428571 0.14285714]]
luỹ thừa bậc 3 của A: [[ 1. 30. 57.]
[ 0. 8. 0.]
[ 0. 201. 343.]]
giải phương trình AX=B [1. 1. 1.]
Bạn có thể tìm hiểu thêm về module numpy.linalg tại: https://numpy.org/doc/stable/reference/routines.linalg.html
Trên đây là một số ví dụ đơn giản về các ứng dụng của thư viện NumPy, ngoài ra NumPy còn chứa rất nhiều điều lí thú đang chờ các bạn khai thác đấy!
