Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengindeks Satu Array Numpy oleh Yang Lain?

Bagaimana untuk Mengindeks Satu Array Numpy oleh Yang Lain?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 02:24:01669semak imbas

How to Index One Numpy Array by Another?

Mengindeks Satu Tatasusunan dengan Satu Lagi dalam Numpy

Pertimbangkan dua matriks, A dan B , dengan A mengandungi nilai arbitrari dan B memegang indeks unsur dalam A. Tugasnya adalah untuk mengekstrak elemen daripada A berdasarkan indeks yang ditentukan oleh B. Pengindeksan ini membenarkan pengambilan elemen terpilih.

Penyelesaian menggunakan Pengindeksan Terperinci:

Pengindeksan lanjutan Numpy membolehkan operasi ini menggunakan ungkapan:

A[np.arange(A.shape[0])[:,None], B]

Pendekatan ini menggunakan gabungan indeks baris dan indeks lajur yang diambil daripada B untuk mendapatkan semula elemen dalam A.

Penyelesaian menggunakan Pengindeksan Linear:

Pendekatan alternatif melibatkan pengindeksan linear:

m, n = A.shape
out = np.take(A, B + n*np.arange(m)[:,None])

Di sini, m dan n mewakili dimensi A, dan operasi dalam fungsi np.take() memastikan pengindeksan elemen yang betul berdasarkan B.

Contoh:

Mari kita gambarkan penyelesaian ini dengan contoh:

import numpy as np

A = np.array([[2, 4, 5, 3],
              [1, 6, 8, 9],
              [8, 7, 0, 2]])

B = np.array([[0, 0, 1, 2],
              [0, 3, 2, 1],
              [3, 2, 1, 0]])

# Advanced indexing
result1 = A[np.arange(A.shape[0])[:,None], B]

# Linear indexing
m, n = A.shape
result2 = np.take(A, B + n*np.arange(m)[:,None])

print("Result using advanced indexing:")
print(result1)

print("Result using linear indexing:")
print(result2)

Output:

Result using advanced indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]

Result using linear indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]

Atas ialah kandungan terperinci Bagaimana untuk Mengindeks Satu Array Numpy oleh Yang Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn