Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mencari Indeks Baris Nilai Tertentu dengan Cekap dalam Tatasusunan NumPy?

Bagaimana untuk Mencari Indeks Baris Nilai Tertentu dengan Cekap dalam Tatasusunan NumPy?

Barbara Streisand
Lepaskan: 2024-12-07 17:22:13
asal
716 orang telah melayarinya

How to Efficiently Find Row Indices of Specific Values in a NumPy Array?

Mencari Indeks Nilai Tertentu dalam Tatasusunan NumPy

Masalah:

Diberi tatasusunan X, tentukan indeks baris nilai tertentu yang disimpan dalam nilai_carian Sebagai contoh, dalam contoh berikut, kami mencari indeks untuk nilai [4, 2], [3, 3], dan [5, 6] dalam tatasusunan X.

X = np.array([[4,  2],
              [9,  3],
              [8,  5],
              [3,  3],
              [5,  6]])

searched_values = np.array([[4, 2],
                            [3, 3],
                            [5, 6]])
Salin selepas log masuk

Output yang dikehendaki ialah:

[0, 3, 4]
Salin selepas log masuk

Penyelesaian:

Pendekatan 1: NumPy Penyiaran

ialah cara untuk menggunakan np.where dan fungsi penyiaran adalah seperti berikut.

np.where((X == searched_values[:, None]).all(-1))[1]
Salin selepas log masuk

Pendekatan 2: Penukaran Indeks Linear Cekap Memori

Cara menukar setiap baris kepada indeks linear unik menggunakan np.ravel_multi_index NumPy Ada.

dims = X.max(0) + 1
out = np.where(np.in1d(np.ravel_multi_index(X.T, dims),
                       np.ravel_multi_index(searched_values.T, dims)))[0]
Salin selepas log masuk

Pendekatan 3: Penukaran Indeks Linear yang Cekap Memori dan Dioptimumkan

NP.searchsorted NumPy juga boleh digunakan untuk mencari indeks linear dengan cepat.

dims = X.max(0) + 1
X1D = np.ravel_multi_index(X.T, dims)
searched_valuesID = np.ravel_multi_index(searched_values.T, dims)
sidx = X1D.argsort()
out = sidx[np.searchsorted(X1D, searched_valuesID, sorter=sidx)]
Salin selepas log masuk

Cara np.ravel_multi_index berfungsi:

np.ravel_multi_index mencipta perwakilan indeks linear bagi indeks berbilang dimensi. Tafsirkan setiap baris sebagai indeks ke dalam tatasusunan multidimensi n-dimensi dan jana indeks linear yang sepadan.

Sebagai contoh, menggunakan np.ravel_multi_index(X.T, dims) pada tatasusunan sampel X:

np.ravel_multi_index(X.T, dims)
# Output: array([30, 66, 61, 24, 41])
Salin selepas log masuk

Ini mewakili indeks linear yang ada pada setiap baris tatasusunan X. Indeks linear ini boleh digunakan untuk mengenal pasti secara unik setiap baris dalam tatasusunan.

Kod sampel yang sepadan dengan setiap kaedah adalah di bawah.

# Approach 1
print(np.where((X == searched_values[:, None]).all(-1))[1])

# Approach 2
dims = X.max(0) + 1
print(np.where(np.in1d(np.ravel_multi_index(X.T, dims),
                       np.ravel_multi_index(searched_values.T, dims)))[0])

# Approach 3
dims = X.max(0) + 1
X1D = np.ravel_multi_index(X.T, dims)
searched_valuesID = np.ravel_multi_index(searched_values.T, dims)
sidx = X1D.argsort()
print(sidx[np.searchsorted(X1D, searched_valuesID, sorter=sidx)])
Salin selepas log masuk

Anda boleh dengan mudah menentukan indeks baris nilai tertentu dalam tatasusunan X menggunakan mana-mana pendekatan.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Indeks Baris Nilai Tertentu dengan Cekap dalam Tatasusunan NumPy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan