Numpy数组的索引是内容丰富的主题,其子集或元素的选取方式很多。
一维数组
一维数组的索引与切片操作,与Python列表功能相似
arr = np.arange(10)
arr
arr[5]
arr[5:8]
当将一个标量值赋值给一个切片时,该值会自动传播到整个选区
arr[5:8] = 12
arr
与Python列表的区别是,数组的切片是元是数组的视图,因此视图上的任何修改都会直接反映到源数组。
arr_slice = arr[5:8]
arr_slice[1] = 12345
arr
arr_slice[:] = 64
arr
如果确实希望得到ndarray切片的副本,而非视图,则需要
arr[5:8].copy()
二维数组及高维数组
对于二维数组,各索引位置上的元素不再是标量,而是一维数组。
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d[2]
如果需要选取单个元素,方法1
arr2d[0][2]
方法2
arr2d[0, 2]
对于2x2x3数组arr3d,arr3d[0]是一个2x3数组
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d
arr3d[0]
标量值和数组都可以赋值给arr3d[0]
old_values = arr3d[0].copy()
arr3d[0] = 42
arr3d
arr3d[0] = old_values
arr3d
arr3d[1,0]可以访问索引以(1,0)开头的值。
切片索引
ndarray的切片语法与Python列表类似。
arr[1:6]
多维数组的切片,可以在一个或多个轴上进行切片,也可以跟整数索引混合使用。
arr2d[:2]
arr2d[:2, 1:]
上面的切片,只能得到相同维数的数组视图。通过将整数索引和切片混合,可以得到低维度切片
arr2d[1, :2]
arr2d[2, :1]
选取全轴
arr2d[:, :1]
对切片表达式的赋值操作会扩散到整个选区
arr2d[:2, 1:] = 0