Problem:
Given an array X, determine the row indices of specified values stored in searched_values. For instance, in the following example, we seek the indices for the values [4, 2], [3, 3], and [5, 6] within the array X.
X = np.array([[4, 2], [9, 3], [8, 5], [3, 3], [5, 6]]) searched_values = np.array([[4, 2], [3, 3], [5, 6]])
The desired output would be:
[0, 3, 4]
Solutions:
Approach 1: NumPy Broadcasting
is a way to utilize np.where and the broadcasting functions are as follows.
np.where((X == searched_values[:, None]).all(-1))[1]
Approach 2: Memory-Efficient Linear Index Conversion
How to convert each row to a unique linear index using NumPy's np.ravel_multi_index There is.
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]
Approach 3: Memory-Efficient and Optimized Linear Index Conversion
NumPy's np.searchsorted can also be used to quickly find linear indexes. can.
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)]
How np.ravel_multi_index works:
np.ravel_multi_index creates a linear index representation of a multidimensional index. Interpret each row as an index into an n-dimensional multidimensional array and generate the corresponding linear index.
For example, applying np.ravel_multi_index(X.T, dims) to a sample array X:
np.ravel_multi_index(X.T, dims) # Output: array([30, 66, 61, 24, 41])
This represents the linear index that each row of array X has. This linear index can be used to uniquely identify each row in the array.
The sample code corresponding to each method is below.
# 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)])
You can easily determine the row index of a particular value in array X using either approach.
The above is the detailed content of How to Efficiently Find Row Indices of Specific Values in a NumPy Array?. For more information, please follow other related articles on the PHP Chinese website!