Computer >> Máy Tính >  >> Lập trình >> Python

Lập chỉ mục cơ bản và lập chỉ mục nâng cao trong NumPy Python

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])