Lập chỉ mục logic danh sách Python

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

________số 8

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

Danh sách Python có được lập chỉ mục 0 hoặc 1 không?

Python sử dụng lập chỉ mục dựa trên số không . Điều đó có nghĩa là, phần tử đầu tiên [giá trị 'đỏ'] có chỉ số 0, phần tử thứ hai [giá trị 'xanh lá cây'] có chỉ số 1, v.v.

Lập chỉ mục có hoạt động với danh sách trong Python không?

Python cũng cung cấp nhiều hàm hoặc phương thức mà bạn có thể sử dụng để làm việc với danh sách . Trong hướng dẫn này, bạn sẽ tìm hiểu riêng về hàm index[]. Phương thức index[] tìm kiếm một phần tử trong danh sách và trả về vị trí/chỉ mục của nó.

Có thể lập chỉ mục trong danh sách không?

Chỉ mục có thể truy cập các phần tử của danh sách . Để làm điều đó, bạn đặt tên cho danh sách, rồi bên trong một cặp dấu ngoặc vuông, bạn sử dụng một số chỉ mục, giống như những gì tôi đang trình bày ngay tại đây. 00. 17 Điều đó cho phép truy cập vào các phần tử riêng lẻ trong danh sách. Việc lập chỉ mục cho danh sách là không dựa trên.

làm gì

Python cũng cho phép bạn lập chỉ mục từ cuối danh sách bằng cách sử dụng số âm, trong đó [-1] trả về phần tử cuối cùng . Điều này cực kỳ hữu ích vì nó có nghĩa là bạn không cần phải lập trình tìm ra độ dài của lần lặp để làm việc với các phần tử ở cuối nó.

Chủ Đề