Việc lập chỉ mục các ndarrays có thể được thực hiện bằng cách sử dụng cú pháp python x [obj] chuẩn, trong đó x là mảng và đối tượng là lựa chọn.
Có ba loại lập chỉ mục khả dụng -
- truy cập trường
- cắt lát cơ bản
- lập chỉ mục nâng cao
Loại lập chỉ mục nào sẽ có tùy thuộc vào obj. Trong phần này, chúng ta sẽ chủ yếu tập trung vào phân loại cơ bản &lập chỉ mục nâng cao.
Chúng ta có thể chia lập chỉ mục nâng cao thành hai phần -
- Lập chỉ mục mảng số nguyên
- Lập chỉ mục Boolean
Cắt lát cơ bản
Khái niệm cơ bản của Python về phép cắt lát được mở rộng trong phép cắt lát cơ bản thành n chiều. Như với đối tượng lát trong python được xây dựng bằng cách cung cấp các tham số bắt đầu, dừng và bước cho chức năng lát. Để có được đầu ra cụ thể, đối tượng lát cắt được chuyển đến mảng để trích xuất một phần của mảng.
Ví dụ 1
import numpy as np arr = np.arange(25) s = slice(2, 21, 4) print (arr[s])
Đầu ra
[ 2 6 10 14 18]
Trong ví dụ trên, đầu tiên chúng ta tạo một đối tượng ndarray (arr) bằng cách sử dụng hàm arange (). Sau đó, một đối tượng lát cắt được tạo bằng cách gán giá trị bắt đầu, dừng và bước cho (các) đối tượng đó. Khi chúng tôi truyền đối tượng lát cắt vào ndarray, chúng tôi nhận được một phần (lát cắt) của mảng bắt đầu với chỉ số 2 đến 21 với bước là 4.
Một cách khác để viết chương trình trên,
# Another way to write above program import numpy as np arr = np.arange(25) s = arr[2:21:4] print (s)
Đầu ra
[ 2 6 10 14 18]
Cắt một món hàng
#Slice single item from an array import numpy as np arr = np.arange(10) s = arr[9] print(s)
Đầu ra
9
Các mục cắt nhỏ bắt đầu từ chỉ mục
#slice item starting from index import numpy as np arr = np.arange(10) s = arr[3:] print(s)
Đầu ra
[3 4 5 6 7 8 9]
Mục cắt giữa các chỉ mục
#slice item between indexes import numpy as np arr = np.arange(10) s = arr[3: 7] print(s)
Đầu ra
[3 4 5 6]
Hai phương pháp trên cũng sẽ được áp dụng cho ndarray đa chiều, như bên dưới -
#slice item between indexes import numpy as np arr = np.array([[[1],[2],[3]], [[4],[5],[6]], [[7], [8], [9]]]) s = arr[1:] print(s)
Đầu ra
[[[4] [5] [6]] [[7] [8] [9]]]
Lập chỉ mục nâng cao
Lập chỉ mục mảng số nguyên:
Hãy tạo một mảng đơn giản với các số nguyên
arr=np.array([[1,2],[3,4],[5,6]]) print(arr)
Đầu ra
[[1 2] [3 4] [5 6]]
Hãy thử chọn một phần tử cụ thể từ mảng, chẳng hạn như các phần tử có chỉ số hàng [0, 1, 2] và chỉ số cột [1, 0, 1] từ mảng ndarray đa chiều.
import numpy as np arr=np.array([[1,2],[3,4],[5,6]]) s = arr[[0, 1, 2],[1, 0, 1]] print(s)
Đầu ra
[2 3 6]
Chọn với 0 chỉ mục sẽ cung cấp cho bạn hàng đầu tiên -
>>> arr=np.array([[1,2],[3,4],[5,6]]) >>> print(arr[0]) [1 2]
Tương tự, chúng ta có thể chọn một mục duy nhất từ mảng, ví dụ - chọn 1 làm chỉ số hàng và 1 làm phần tử chỉ số cột cho giá trị mảng là 4.
>>> print(arr[[1], [1]]) [4]
Chúng ta có thể thực hiện phép toán số học như phép cộng và trả về giá trị của một chỉ số cụ thể sau khi thực hiện phép cộng.
>>> print(arr[[1], [1]]+ 1) [5]
Như chúng ta có thể thấy giá trị chỉ mục được tăng lên 1 nhưng mảng thực tế vẫn giữ nguyên.
>>> arr array([[1, 2], [3, 4], [5, 6]])
Nhưng chúng ta có thể thay đổi các giá trị của mảng và trả về bản sao mới của mảng.
>>> arr[[1], [1]] +=1 >>> arr array([[1, 2], [3, 5], [5, 6]])
Lập chỉ mục Boolean
Chúng tôi đã sử dụng lập chỉ mục boolean khi kết quả sẽ là kết quả của các phép toán boolean.
>>> arr=np.array([[0,1,2], [3,4,5], [6,7,8], [9,10,11]]) >>> arr array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])
Trả về các giá trị là 1.
>>> arr[arr == 1] array([1])
Trả về các giá trị là số chẵn
>>> arr[arr %2 == 0] array([ 0, 2, 4, 6, 8, 10])