Trong phần này, chúng ta sẽ xem xét lập chỉ mục và cắt. Chúng hoạt động theo cách tương tự như lập chỉ mục và cắt với danh sách Python tiêu chuẩn, với một vài điểm khác biệt
Đây là một video bao gồm chủ đề này
Lập chỉ mục một mảng
Lập chỉ mục được sử dụng để lấy các phần tử riêng lẻ từ một mảng, nhưng nó cũng có thể được sử dụng để lấy toàn bộ hàng, cột hoặc mặt phẳng từ các mảng nhiều chiều
Lập chỉ mục trong 1 chiều
Chúng ta có thể tạo mảng numpy 1 chiều từ một danh sách như thế này
import numpy as np a1 = np.array[[1, 2, 3, 4]] print[a1] # [1, 2, 3, 4]
Chúng ta có thể lập chỉ mục vào mảng này để lấy một phần tử riêng lẻ, hoàn toàn giống như một danh sách hoặc bộ thông thường
print[a1[0]] # 1 print[a1[2]] # 3
Lập chỉ mục trong 2 chiều
Chúng ta có thể tạo một mảng numpy 2 chiều từ danh sách danh sách python, như thế này
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]
Đây là một sơ đồ của mảng
Chúng ta có thể lập chỉ mục một phần tử của mảng bằng cách sử dụng hai chỉ mục - i chọn hàng và j chọn cột
print[a2[2, 1]] # 8
Lưu ý cú pháp - các giá trị i và j đều nằm trong dấu ngoặc vuông, được phân tách bằng dấu phẩy [chỉ mục thực sự là một bộ [2, 1], nhưng sử dụng đóng gói bộ]. Ví dụ chọn hàng 2, cột 1, có giá trị 8. Điều này so sánh với cú pháp bạn có thể sử dụng với danh sách 2D [nghĩa là danh sách các danh sách]
v = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print[v[2][1]] # 8
Chọn một hàng hoặc cột
Nếu chúng tôi có thể cung cấp một chỉ mục duy nhất, nó sẽ chọn một hàng [giá trị i] và trả về dưới dạng một mảng xếp hạng 1
print[a2[2]] # [7, 8, 9]
Điều đó khá giống với những gì sẽ xảy ra với danh sách 2D. Tuy nhiên, numpy cũng cho phép chúng tôi chọn một cột duy nhất
print[a2[:, 1]] # [2, 5, 8]
Chúng ta sẽ bỏ qua một chút để cắt lát, ở phần sau của hướng dẫn này, nhưng ý nghĩa của cú pháp này là
- đối với giá trị i, lấy tất cả các giá trị [. là một lát đầy đủ, từ đầu đến cuối]
- đối với giá trị j lấy 1
Đưa ra mảng này [2, 5, 8]
Mảng bạn nhận được khi lập chỉ mục hoặc cắt một mảng có nhiều mảng là dạng xem của mảng ban đầu. Đó là cùng một dữ liệu, chỉ được truy cập theo một thứ tự khác. Nếu bạn thay đổi khung nhìn, bạn sẽ thay đổi các phần tử tương ứng trong mảng ban đầu
Lập chỉ mục trong 3 chiều
Chúng ta có thể tạo một mảng numpy 3 chiều từ danh sách python gồm các danh sách, như thế này
import numpy as np a3 = np.array[[[[10, 11, 12], [13, 14, 15], [16, 17, 18]], [[20, 21, 22], [23, 24, 25], [26, 27, 28]], [[30, 31, 32], [33, 34, 35], [36, 37, 38]]]]
Đây là một sơ đồ của mảng
Một mảng 3D giống như một chồng ma trận
- Chỉ mục đầu tiên, i, chọn ma trận
- Chỉ mục thứ hai, j, chọn hàng
- Chỉ số thứ ba, k, chọn cột
Đây là sơ đồ tương tự, trải ra một chút để chúng ta có thể thấy các giá trị
Đây là cách lập chỉ mục một giá trị cụ thể trong mảng 3D
________số 8
Thao tác này chọn chỉ mục ma trận 2 [ma trận cuối cùng], hàng 0, cột 1, cho giá trị 31
Chọn một hàng hoặc cột trong mảng 3D
Bạn có thể truy cập bất kỳ hàng hoặc cột nào trong mảng 3D. Có 3 trường hợp
Trường hợp 1 - chỉ định hai chỉ số đầu tiên. Trong trường hợp này, bạn đang chọn giá trị i [ma trận] và giá trị j [hàng]. Điều này sẽ chọn một hàng cụ thể. Trong ví dụ này, chúng tôi đang chọn hàng 2 từ ma trận 1
print[a3[1, 2]] # [26 27 28]
Trường hợp 2 - chỉ định giá trị i [ma trận] và giá trị k [cột], sử dụng một lát cắt đầy đủ [. ] cho giá trị j [hàng]. Điều này sẽ chọn một cột cụ thể. Trong ví dụ này, chúng tôi đang chọn cột 1 từ ma trận 0
print[a1[0]] # 1 print[a1[2]] # 30
Trường hợp 3 - chỉ định giá trị j [hàng] và giá trị k [cột], sử dụng một lát cắt đầy đủ [. ] cho giá trị i [ma trận]. Điều này sẽ tạo một hàng bằng cách lấy cùng một phần tử từ mỗi ma trận. Trong trường hợp này, chúng tôi đang lấy hàng 1, cột 2 từ mỗi ma trận
print[a1[0]] # 1 print[a1[2]] # 31
Chọn một ma trận trong một mảng 3D
Nếu chúng ta chỉ xác định chỉ mục i, numpy sẽ trả về ma trận tương ứng. Ta sẽ gọi trường hợp này là 1. Trong ví dụ này, chúng tôi sẽ yêu cầu ma trận 2
print[a1[0]] # 1 print[a1[2]] # 32
Trường hợp 2 nếu chúng ta chỉ xác định giá trị j [sử dụng một lát cắt đầy đủ cho các giá trị i], chúng ta sẽ thu được một ma trận được tạo từ hàng đã chọn được lấy từ mỗi mặt phẳng. Trong ví dụ này, chúng tôi sẽ lấy hàng 1
print[a1[0]] # 1 print[a1[2]] # 33
Trường hợp 3 nếu chúng ta chỉ xác định giá trị k [sử dụng các lát cắt đầy đủ cho các giá trị i và j], chúng ta sẽ thu được một ma trận được tạo từ cột đã chọn được lấy từ mỗi mặt phẳng. Trong ví dụ này, chúng tôi sẽ lấy cột 0
print[a1[0]] # 1 print[a1[2]] # 34
Cắt một mảng
Bạn có thể cắt một mảng có nhiều mảng là một cách tương tự để cắt một danh sách - ngoại trừ bạn có thể thực hiện việc đó theo nhiều chiều
Cũng giống như lập chỉ mục, mảng bạn nhận được khi lập chỉ mục hoặc cắt một mảng có nhiều mảng là dạng xem của mảng ban đầu. Đó là cùng một dữ liệu, chỉ được truy cập theo một thứ tự khác. Điều này khác với danh sách, trong đó một lát cắt trả về một danh sách hoàn toàn mới
Danh sách cắt lát - một bản tóm tắt
Chỉ là một bản tóm tắt nhanh về cách cắt hoạt động với danh sách Python bình thường. Giả sử chúng ta có một danh sách
print[a1[0]] # 1 print[a1[2]] # 35
Chúng ta có thể sử dụng cắt lát để lấy một danh sách phụ, như thế này
print[a1[0]] # 1 print[a1[2]] # 36
Ký hiệu lát chỉ định giá trị bắt đầu và kết thúc [bắt đầu. end] và sao chép danh sách từ đầu đến cuối nhưng không bao gồm phần cuối
Chúng ta có thể bỏ qua phần bắt đầu, trong trường hợp đó, phần bắt đầu ở đầu danh sách. Chúng ta có thể bỏ qua phần cuối, vì vậy lát tiếp tục đến cuối danh sách. Nếu chúng ta bỏ qua cả lát cắt được tạo là một bản sao của toàn bộ danh sách
print[a1[0]] # 1 print[a1[2]] # 37
Một điều cuối cùng cần lưu ý là sự khác biệt giữa chỉ mục và lát cắt có độ dài 1
print[a1[0]] # 1 print[a1[2]] # 38
Chỉ mục trả về một phần tử của mảng, lát cắt trả về danh sách một phần tử
Cắt mảng numpy 1D
Cắt một mảng numpy 1D gần giống hệt như cắt một danh sách
print[a1[0]] # 1 print[a1[2]] # 39
Điều duy nhất cần nhớ nếu [không giống như danh sách] a1 và b đều đang xem cùng một dữ liệu cơ bản [b là chế độ xem dữ liệu]. Vì vậy, nếu bạn thay đổi một phần tử trong b, a1 sẽ bị ảnh hưởng [và ngược lại]
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]0
Cắt một mảng 2D
Bạn có thể cắt mảng 2D theo cả hai trục để thu được tập hợp con hình chữ nhật của mảng ban đầu. Ví dụ
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]1
Điều này chọn hàng 1. [1 đến cuối mảng] và cột 2. 4 [cột 2 và 3], như được hiển thị ở đây
Cắt một mảng 3D
Bạn có thể cắt một mảng 3D theo cả 3 trục để thu được tập hợp con hình khối của mảng ban đầu
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]2
cái này chọn
- máy bay. 2 [2 mặt phẳng đầu tiên]
- hàng 1. [2 hàng cuối]
- cột. 2 [2 cột đầu tiên]
Như được hiển thị ở đây
lát đầy đủ
Tất nhiên, bạn có thể sử dụng các lát cắt đầy đủ. để chọn tất cả các mặt phẳng, cột hoặc hàng. Tuy nhiên, đối với các chỉ mục theo sau, chỉ cần bỏ qua chỉ mục được tính là một lát cắt đầy đủ. Vì vậy, đối với mảng 2D
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]3
Đối với mảng 3D
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]4
Lát so với lập chỉ mục
Như chúng ta đã thấy trước đó, bạn có thể sử dụng một chỉ mục để chọn một cột hoặc một mặt phẳng cụ thể. Ở đây chúng tôi chọn hàng 1, cột 2. 4
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]5
Bạn cũng có thể sử dụng một lát có độ dài 1 để làm điều gì đó tương tự [lát 1. 2 thay vì chỉ số 1]
import numpy as np a2 = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]6
Chú ý sự khác biệt tinh tế. Cái đầu tiên tạo mảng 1D, cái thứ hai tạo mảng 2D chỉ có một hàng
Nếu bạn thấy bài viết này hữu ích, bạn có thể quan tâm đến cuốn sách Công thức NumPy hoặc các cuốn sách khác của cùng tác giả