The objective is to perform indexing on a 2D NumPy array using two provided lists of indices, one for rows and one for columns. The desired outcome is to obtain a subset of the array based on the specified indices efficiently.
To achieve this, we can leverage the np.ix_ function from NumPy. np.ix_ creates tuples of indexing arrays that can be employed for broadcasting. Here's how it works:
Selection:
<code class="python">x_indexed = x[np.ix_(row_indices, col_indices)]</code>
This creates a tuple of indexing arrays based on row_indices and col_indices. Broadcasting these arrays enables us to index into x and extract the desired subset.
Assignment:
<code class="python">x[np.ix_(row_indices, col_indices)] = value</code>
This assigns the specified value into the indexed positions in x.
Selection:
<code class="python">row_mask = np.array([True, False, False, True, False], dtype=bool) col_mask = np.array([False, True, True, False, False], dtype=bool) x_indexed = x[np.ix_(row_mask, col_mask)]</code>
Here, we use boolean masks (row_mask and col_mask) to define which rows and columns to select.
Assignment:
<code class="python">x[np.ix_(row_mask, col_mask)] = value</code>
This assigns value to the masked positions in x.
Consider the following array and index lists:
<code class="python">x = np.random.random_integers(0, 5, (20, 8)) row_indices = [4, 2, 18, 16, 7, 19, 4] col_indices = [1, 2]</code>
Using np.ix_, we can index into x:
<code class="python">x_indexed = x[np.ix_(row_indices, col_indices)] print(x_indexed) # Output: # [[76 56] # [70 47] # [46 95] # [76 56] # [92 46]]</code>
This gives us the desired subset of the array with rows and columns selected based on the provided indices.
The above is the detailed content of How to Efficiently Index a 2D NumPy Array Using Two Lists of Indices?. For more information, please follow other related articles on the PHP Chinese website!