Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mencari Indeks Baris Nilai Tertentu dengan Cekap 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]])
Output yang dikehendaki ialah:
[0, 3, 4]
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]
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]
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)]
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])
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)])
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!