NumPy arrays support multi-dimensional indexing using a comma-separated index tuple. For a 2D array, the first index selects the row and the second index selects the column. With np_2d = np.array([[1, 2, 3, 4], [10, 20, 30, 40]]), row 0 is [1, 2, 3, 4]. Within that row, column 1 is the second element, which is 2. Therefore, np_2d[0, 1] returns 2.
Option A is incorrect because np_2d[0,1] already produces a scalar (an integer), and indexing a scalar again with [1] is invalid. Option C, np_2d[2], attempts to access the third row, but this array has only two rows (indices 0 and 1), so it would raise an index error. Option D, np_2d[2, 0], also references a non-existent third row and would error.
This indexing rule is foundational in array-based computing: it provides direct access to elements without loops and supports efficient numerical computation. Understanding row/column indexing is essential for slicing, broadcasting, and matrix operations taught in scientific computing curricula.