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

results matching ""

    No results matching ""