Nặng nề. Làm việc với mảng và ma trận


Thư viện dữ liệu NumPy

NumPy — một thư viện mã nguồn mở dành cho ngôn ngữ lập trình Python, thực hiện một số lượng lớn các thao tác để làm việc với vectơ, ma trận và mảng. 

Các thuật toán toán học được thực hiện trong các ngôn ngữ thông dịch (ví dụ: Python) thường chậm hơn nhiều so với các thuật toán được thực hiện trong các ngôn ngữ được biên dịch (ví dụ: Fortran, C, Java). Thư viện NumPy cung cấp triển khai các thuật toán tính toán (ở dạng hàm và toán tử) được tối ưu hóa để làm việc với các mảng nhiều chiều. 
Do đó, bất kỳ thuật toán nào có thể được biểu thị dưới dạng một chuỗi các thao tác trên mảng (ma trận) và được triển khai bằng cách sử dụng NumPy đều đủ nhanh.

NumPy (Numeric Python) là một thư viện toán học cốt lõi để làm việc với dữ liệu. Thư viện này làm cơ sở cho các thư viện khác để làm việc với các tác vụ phân tích dữ liệu hoặc học máy (ví dụ: Pandas (làm việc với dữ liệu dạng bảng), SciPy (phương pháp tối ưu hóa và tính toán khoa học), < tt>Matplotlib (vẽ đồ thị)).

 

Làm việc với NumPy

Để bắt đầu làm việc với thư viện numpy, bạn cần nhập nó vào đầu chương trình giống như bất kỳ thư viện nào khác, nhập numpy hoặc so (được sử dụng thường xuyên hơn) nhập numpy dưới dạng np



Vectơ NumPy

Vectơ (hoặc mảng) trong NumPy là một tập hợp dữ liệu đồng nhất có thứ tự.

Một phần tử của vectơ có thể được truy cập bằng chỉ mục của nó, giống như nó được thực hiện trong danh sách. Mỗi phần tử của vectơ có vị trí cụ thể của riêng nó, được đặt trong quá trình tạo.
Tất cả các phần tử vectơ có cùng kiểu dữ liệu (int, str, bool, v.v.).

Tạo vectơ
Để tạo một vectơ, bạn cần sử dụng hàm tạo numpy.array (một đối tượng có thể lặp lại).
Dấu ngoặc đơn cho biết bất kỳ đối tượng có thể lặp lại nào: tuple, list, range(), v.v.
 
Ví dụ 
nhập numpy dưới dạng np nhập numpy dưới dạng np print(np.array((1,2,3,4,5))) # vector từ tuple print(np.array([1,2,3,4,5])) # vector từ danh sách print(np.array(range(5))) # vector từ trình tạo

Làm việc với các phần tử vectơ

Làm việc với các phần tử vectơ cũng giống như với các phần tử danh sách, bạn có thể truy cập các phần tử theo chỉ mục của chúng và cũng có thể tạo các lát cắt.

Ví dụ
1
2
3
4
5
6
7
nhập numpy dưới dạng np V = np.array((1,2,3,4)) in(V[0]) # 1 in(V[-1]) # 4 in(V[1:-2]) # [2] in(V[::2]) # [1 3]
Chọn phần tử vectơ
Để chọn các phần tử vectơ, bạn có thể sử dụng một vectơ chứa các giá trị logic (biểu thức). Các phần tử của vectơ sẽ là True trong vectơ có giá trị boolean sẽ được chọn.
 

Ví dụ
nhập numpy dưới dạng np V = np.array([1,-2,3,-4,5]) # chọn hai phần tử đầu tiên của vector print(V[np.array((Đúng, Đúng, Sai, Sai, Sai))]) # [ 1 -2] # chọn phần tử vector dương in(V[V > 0]) # [1 3 5] # chọn các phần tử vector chẵn in(V[V % 2 == 0]) # [-2 -4]

Các cách tạo mảng và ma trận

Các cách hữu ích khác để tạo mảng và ma trận.

Ví dụ
 1
 2
 3
 4
 5
 6
 7
 số 8
 9
10
mười một
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ba mươi
31
32
33
34
35
36
37
nhập numpy dưới dạng np # Mảng một chiều các số không in(np.zero(5)) #[0. 0.0.0.0.] # Mảng hai chiều các số không print(np.zeros((2, 3))) # [[0. 0.0.] #[0. 0.0.]] # Mảng 3D của các đơn vị in(np.ones((2,3,4))) # [[[1. 1. 1. 1.] # [1. 1. 1. 1.] # [1. 1. 1. 1.]] # # [[1. 1. 1. 1.] # [1. 1. 1. 1.] # [1. 1. 1. 1.]]] # Mảng số không có chỉ định loại in(np.zeros(5, dtype=np.int)) # [0 0 0 0 0] # Một mảng dựa trên danh sách các danh sách print(np.array([[1,2.0],[0,0],(1,3.)])) # [[1. 2.] #[0. 0.] # [1. 3.]] # Một mảng chứa đầy các phần tử của một cấp số cộng bắt đầu từ 0 in(np.arange(10)) # [0 1 2 3 4 5 6 7 8 9] # Cấp số cộng với chỉ định loại print(np.arange(2, 10, dtype=np.float)) # [2. 3. 4. 5. 6. 7. 8. 9.] # Cấp số cộng với hiệu không nguyên in(np.arange(2, 3, 0,1)) # [2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9] # Cấp số cộng với số hạng cho trước print(np.linspace(1., 4., 6)) # [1. 1,6 2,2 2,8 3,4 4. ]
Không có phần tử mảng
 
Hàm khác không (V) 
Kết quả là một bộ mảng. Mỗi mảng như vậy tương ứng với một trục riêng biệt của mảng ban đầu và chứa các chỉ số có các phần tử khác 0 trong mảng này.
V - a NumPy mảng hoặc đối tượng dạng mảng.
Trả về một Python tuple (tuple) - tuple với các mảng chỉ mục gồm các phần tử khác 0 của mảng V ban đầu.
 
Hàm count_nonzero(V) 
Hàm này dựa trên phương thức tích hợp sẵn  __bool__() của các đối tượng Python để kiểm tra xem chúng có đúng hay không. Theo đó, hàm  count_nonzero() thực sự có thể hoạt động không chỉ với các số mà còn với bất kỳ đối tượng nào có thể đúng hoặc sai.
V - a NumPy mảng hoặc đối tượng dạng mảng.
Hàm trả về số phần tử mảng khác không dọc theo trục đã chỉ định.

Mảng chéo

Hàm  diag(V, k=0) cho phép bạn trích xuất một đường chéo từ một mảng, cũng như xây dựng các mảng đường chéo từ các mảng một chiều.
V - Một đối tượng dạng mảng, mảng hai chiều hoặc một chiều, ma trận, danh sách hoặc bộ hoặc bất kỳ hàm hoặc đối tượng nào có phương thức trả về danh sách hoặc bộ.
k - chỉ số của đường chéo (tùy chọn).
Giá trị mặc định là k = 0 tương ứng với đường chéo chính. Giá trị k dương sẽ di chuyển đường chéo lên trên, giá trị âm sẽ di chuyển nó xuống dưới.

Hàm trả về mảng NumPy (ndarray) - đường chéo mảng đã chỉ định hoặc một mảng chéo từ mảng một chiều đã chỉ định.

Mảng 2D NumPy

Một phần tử của mảng hai chiều được truy cập bằng cách chỉ định tọa độ của phần tử, đầu tiên là số hàng, sau đó là số cột. Các tọa độ được phân tách bằng dấu phẩy. 
Bất kỳ mảng nào cũng có thể được chuyển đổi thành mảng hai chiều bằng hàm reshape().

Ví dụ
1
2
3
4
5
6
7
8
# Hàm reshape() thay đổi hình dạng của một mảng mà không thay đổi dữ liệu của nó. x = np.arange(12).reshape(3, 4) in(x) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] # Để truy cập một phần tử, chỉ định tọa độ của nó được phân tách bằng dấu phẩy in(x[1, 2]) # 6