Bạn có thể lập chỉ mục các giá trị cụ thể từ một mảng NumPy bằng cách sử dụng một mảng NumPy khác gồm các giá trị Boolean trên một trục để chỉ định các chỉ mục bạn muốn truy cập. Ví dụ: để truy cập giá trị thứ hai và thứ ba của mảng
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''2, bạn có thể sử dụng biểu thức
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''3 bằng cách sử dụng mảng Boolean làm mặt nạ lập chỉ mục
Ví dụ lập chỉ mục Boolean 1D
Đây là một ví dụ tối thiểu cho mảng NumPy một chiều
import numpy as np # 1D Boolean Indexing a = np.array[[4, 6, 8]] b = np.array[[False, True, True]] print[a[b]] ''' [6 8] '''
Ví dụ lập chỉ mục Boolean 2D
Và đây là một ví dụ tối thiểu cho mảng 2D
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''
Hãy đi sâu vào một ví dụ khác. Hãy xem đoạn mã sau
import numpy as np a = np.array[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]] indices = np.array[[[False, False, True], [False, False, False], [True, True, False]]] print[a[indices]] # [3 7 8]
Chúng tôi tạo hai mảng
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''0 và
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''1
- Mảng đầu tiên chứa dữ liệu số hai chiều – bạn có thể coi nó là mảng dữ liệu
- Mảng thứ hai có cùng hình dạng và chứa các giá trị Boolean – hãy nghĩ về nó như mảng lập chỉ mục
Một tính năng tuyệt vời của NumPy là bạn có thể sử dụng mảng Boolean làm sơ đồ lập chỉ mục để truy cập các giá trị cụ thể từ mảng thứ hai. Nói một cách dễ hiểu, chúng tôi tạo một mảng NumPy mới từ mảng dữ liệu chỉ chứa các phần tử mà mảng lập chỉ mục chứa các giá trị Boolean
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''2 tại các vị trí mảng tương ứng. Do đó, mảng kết quả chứa ba giá trị 3, 7 và 8
Lập chỉ mục Boolean Ví dụ One-Liner Python
Python một lớp lót. Khoa học dữ liệu 3. NumPy Lập chỉ mục Boolean + Phát sóng + Nonzero[]
Xem video này trên YouTube
Trong phần nội dung sau, bạn sẽ sử dụng tính năng này để phân tích mạng xã hội thu nhỏ
Chúng tôi đang kiểm tra các vấn đề sau đây. “Đi tìm tên những siêu sao Instagram với hơn 100 triệu người theo dõi. ”
## Dependencies import numpy as np ## Data: popular Instagram accounts [millions followers] inst = np.array[[[232, "@instagram"], [133, "@selenagomez"], [59, "@victoriassecret"], [120, "@cristiano"], [111, "@beyonce"], [76, "@nike"]]] ## One-liner superstars = inst[inst[:,0].astype[float] > 100, 1] ## Results print[superstars]
Bạn có thể tính toán kết quả của một lớp lót này trong đầu, phải không?
Dữ liệu bao gồm một mảng hai chiều trong đó mỗi hàng đại diện cho một người có ảnh hưởng trên Instagram. Cột đầu tiên cho biết số lượng người theo dõi của họ [tính bằng triệu] và cột thứ hai cho biết tên Instagram của họ. Câu hỏi là tìm ra tên của những người có ảnh hưởng trên Instagram với hơn 100 triệu người theo dõi
Một lớp lót sau đây là một cách để giải quyết vấn đề này. Lưu ý rằng có nhiều lựa chọn thay thế khác – đây chỉ là lựa chọn mà tôi thấy có ít ký tự nhất
## One-liner superstars = inst[inst[:,0].astype[float] > 100, 1]
Hãy giải cấu trúc một lớp lót này theo cách từng bước
Đầu tiên, chúng tôi tính toán giá trị Boolean cho dù mỗi người có ảnh hưởng có hơn 100 triệu người theo dõi hay không
Cột đầu tiên của mảng dữ liệu chứa số lượng người theo dõi, vì vậy chúng tôi sử dụng phép cắt để truy cập dữ liệu này [
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''3 trả về tất cả các hàng trừ cột đầu tiên]. Tuy nhiên, mảng dữ liệu chứa các loại dữ liệu hỗn hợp [số nguyên và chuỗi]. Do đó, NumPy tự động gán kiểu dữ liệu không phải là số cho mảng
Nhưng vì chúng ta muốn thực hiện so sánh số trên cột đầu tiên của mảng dữ liệu [kiểm tra xem mỗi giá trị có lớn hơn 100 hay không], trước tiên chúng ta cần chuyển mảng thành kiểu số [ví dụ float]
Tại thời điểm này, chúng tôi kiểm tra xem một mảng NumPy kiểu float có lớn hơn giá trị số nguyên hay không. Chính xác những gì xảy ra ở đây? . NumPy tự động đưa hai toán hạng về cùng một hình dạng. Sau đó, nó so sánh phần tử của hai mảng có hình dạng bằng nhau. Kết quả là một mảng các giá trị Boolean. Bốn người có ảnh hưởng có hơn 100 triệu người theo dõi
Bây giờ chúng tôi lấy mảng Boolean này làm mảng lập chỉ mục để chọn những người có ảnh hưởng với hơn 100 triệu người theo dõi [các hàng]
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''0
Vì chúng tôi chỉ quan tâm đến tên của những người có ảnh hưởng này, nên chúng tôi chọn hàng thứ hai làm kết quả cuối cùng được lưu trữ trong biến số siêu sao
Những người có ảnh hưởng với hơn 100 triệu người theo dõi trên Instagram là
# 2D Boolean Indexing a = np.array[[[1, 2, 3], [4, 5, 6]]] b = np.array[[[True, False, False], [False, False, True]]] print[a[b]] ''' [6 8] [1 6] '''1
Cái gì tiếp theo?
Học NumPy sẽ không chỉ giúp bạn trở thành một lập trình viên Python giỏi hơn mà còn cải thiện cơ hội tìm được các vị trí có lợi nhuận với tư cách là nhà khoa học dữ liệu và giải quyết các vấn đề quan trọng trong thế giới thực
Để giúp bạn tăng giá trị của mình trên thị trường, tôi đã viết một cuốn sách NumPy mới - 100% dựa trên nguyên tắc học tập dựa trên câu đố đã được chứng minh
Chris
Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính
Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới
Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây