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

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

Barbara Streisand
Barbara Streisandasal
2024-12-12 18:44:11463semak imbas

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

Bagaimana untuk Mencari Indeks Baris Beberapa Nilai dalam Tatasusunan NumPy?

NumPy menawarkan beberapa pendekatan untuk mencari indeks baris nilai tertentu dalam tatasusunan NumPy:

Pendekatan #1: NumPy Penyiaran

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

Pendekatan #2: Pendekatan Cekap Memori dengan np.ravel_multi_index

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: Cekap Memori Pendekatan dengan np.searchsorted

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

Memahami np.ravel_multi_index

np.ravel_multi_index menukar tuple pengindeksan berbilang dimensi kepada indeks linear untuk grid. Ia menganggap setiap lajur mewakili dimensi dan menggunakan bentuk grid untuk mengira indeks linear.

Sebagai contoh, dengan X:

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

dan malap = [10, 7], baris pertama daripada X (4, 2) ditukar kepada indeks linear 30. Ini sepadan dengan baris 4 dan lajur 2 pada grid:

dims = X.max(0) + 1 # [10, 7]
np.ravel_multi_index(X.T, dims) # [30, 66]

Memilih Dimensi untuk Indeks Linear Unik

Untuk memastikan indeks linear yang unik, dimensi grid hendaklah ditetapkan kepada regangan maksimum setiap paksi tatasusunan input X. Ini boleh dicapai dengan menambah 1 kepada nilai maksimum setiap lajur dalam X.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Indeks Baris Berbilang Nilai dengan Cekap dalam Tatasusunan NumPy?. 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