Lập chỉ mục theo chiều
Bài học 13 trên 18 trong khóa học Nền tảng NumPy của Coddy.
Numpy hỗ trợ một công cụ cực kỳ mạnh mẽ: lập chỉ mục các chiều.
Để lập chỉ mục một chiều, ta dùng dấu hai chấm :. Dấu hai chấm lấy tất cả phần tử tại chỉ số cụ thể mà nó được đặt vào. Ví dụ, giả sử ta có một mảng có hình dạng ary.shape # --> (2, 1, 3, 1), đặt dấu hai chấm : tại ary[:, 0, 0, 0] sẽ lấy hai phần tử ngoài cùng bên trái của hình dạng, rồi với mỗi phần tử, nó sẽ lấy phần tử có chỉ số 0 ở các chiều còn lại.
Lưu ý: Vị trí của dấu hai chấm trong brackets [] là chiều mà ta đang lập chỉ mục, nghĩa là
ary[:, 0, 0, 0]Lập chỉ mục chiều 4Dary[0, :, 0, 0]Lập chỉ mục chiều 3Dary[0, 0, :, 0]Lập chỉ mục chiều 2Dary[0, 0, 0, :]Lập chỉ mục chiều 1Dary[:, :, 0, 0]Lập chỉ mục các chiều 4D và 3D- vân vân
Ví dụ 1
ary = np.array([
[1, 2],
[3, 4]
])
ary[:, 0] # --> [1, 3]
ary[0, :] # --> [1, 2]Dấu hai chấm lấy tất cả phần tử tại chỉ số đã chỉ định rồi tiếp tục đến chỉ số tiếp theo
Trong trường hợp này:
ary[:, 0]Ta lấy tất cả phần tử đầu tiên, rồi tại mỗi phần tử ta lấy phần tử chỉ số 0ary[0, :]Ta lấy phần tử đầu tiên, rồi tại phần tử đó ta lấy tất cả phần tử.
Ví dụ 2
Mảng 3D
ary = np.array([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
])
ary[:, 0, :] # --> [[1, 2], [5, 6]]
ary[:, :, 0] # --> [[1, 3], [5, 7]]ary[:, 0, :]Ta lấy tất cả phần tử, sau đó lấy phần tử đầu tiên, cuối cùng lấy tất cả phần tử ở đóary[:, :, 0]Ta lấy tất cả phần tử, sau đó lấy tất cả các phần tử này, cuối cùng lấy phần tử đầu tiên ở mỗi phần tử.- Bạn đoán được đầu ra của
ary[0, :, :]không?
Ví dụ 3
Lấy chỉ số đầu tiên và cuối cùng của mỗi hàng
x = np.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],
])
x[:, np.array([0, -1])]
>>> [0, 5, 6, 11, 12, 17, 18, 23]Ví dụ 4
Một mảng có hình dạng (2, 1, 3, 1), giống như ví dụ mở đầu
ary = np.array([
[
[
[1],[2],[3]
]
],
[
[
[4],[5],[6]
]
]
])
ary[:, 0, 0, 0] # --> [1, 4]
ary[0, :, 0, 0] # --> [1]
ary[0, 0, :, 0] # --> [1, 2, 3]
ary[0, 0, 0, :] # --> [1]Lưu ý: Bạn cũng có thể dùng cú pháp cắt lát start:stop:step mà ta đã học trong bài học Slicing
ary[:, 0:5, 2:3, :]
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Thử thách
DễVới mảng 3D ary, hãy lấy số thứ 2, thứ 3 và thứ 4 từ mỗi mảng 1D.
Tự làm thử
import numpy as np
'''
ary looks like:
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]]])
'''
ary = np.arange(0, 100).reshape(5, 2, 10) # don't change ary
res = ary[] # <-- Complete indices
print(str(res).replace("\n", "")) # don't change this lineTất cả bài học trong Nền tảng NumPy
3Lập chỉ mục mảng NumPy
Lập chỉ mục cơ bảnCắt látLập chỉ mục mảngLập chỉ mục theo chiềuLập chỉ mục BooleanLập chỉ mục với nhiều điều kiệnTự luyện tập: Trình biên dịch Python online