一维数组索引
- >>> x = np.arange(10)
- >>> x[2]
- 2
- >>> x[-2]
- 8
二维数组索引
- >>> x.shape = (2,5) # now x is 2-dimensional
- >>> x[1,3]
- 8
- >>> x[1,-1]
- 9
数组切片
- >>> x = np.arange(10)
- >>> x[2:5]
- array([2, 3, 4])
- >>> x[:-7]
- array([0, 1, 2])
- >>> x[1:7:2]
- array([1, 3, 5])
- >>> y = np.arange(35).reshape(5,7)
- >>> y[1:5:2,::3]
- array([[ 7, 10, 13],
- [21, 24, 27]])
例:产生一个一组数组,使用数组来索引出需要的元素。让数组 [3,3,1,8] 取出 x 中的第 3,3,1,8 的四个元素组成一个数组 view
- >>> x = np.arange(10,1,-1)
- >>> x
- array([10, 9, 8, 7, 6, 5, 4, 3, 2])
- >>> x[np.array([3, 3, 1, 8])]
- array([7, 7, 9, 2])
当然,类似切片那样,Index 也可以使用负数。但是索引值不能越界!
- >>> x[np.array([3,3,-3,8])]
- array([7, 7, 4, 2])
例 1:产生一个 5X7 的数组,选择 0,2,4 行,0,1,2 列的数
- >>> y = np.arange(35).reshape(5,7)
- >>> y[np.array([0,2,4]), np.array([0,1,2])]
- array([ 0, 15, 30])
例 2:选取第 0,2,4 行,第 1 列的值
- >>> y[np.array([0,2,4]), 1]
- array([ 1, 15, 29])
例 3:选取第 0,2,4 行的值
- >>> y[np.array([0,2,4])]
- array([[ 0, 1, 2, 3, 4, 5, 6],
- [14, 15, 16, 17, 18, 19, 20],
- [28, 29, 30, 31, 32, 33, 34]])
例 1
- >>> y = np.arange(35)
- >>> b = y>20
- >>> y[b]
- array([21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])
例 2
- >>> b[:,5] # use a 1-D boolean whose first dim agrees with the first dim of y
- array([False, False, False, True, True], dtype=bool)
- >>> y[b[:,5]]
- array([[21, 22, 23, 24, 25, 26, 27],
- [28, 29, 30, 31, 32, 33, 34]])
例 3
- >>> x = np.arange(30).reshape(2,3,5)
- >>> x
- array([[[ 0, 1, 2, 3, 4],
- [ 5, 6, 7, 8, 9],
- [10, 11, 12, 13, 14]],
- [[15, 16, 17, 18, 19],
- [20, 21, 22, 23, 24],
- [25, 26, 27, 28, 29]]])
- >>> b = np.array([[True, True, False], [False, True, True]])
- >>> x[b]
- array([[ 0, 1, 2, 3, 4],
- [ 5, 6, 7, 8, 9],
- [20, 21, 22, 23, 24],
- [25, 26, 27, 28, 29]])
例 1:产生一个 5X7 的数组,使用数组来索引第一个轴,使用切换来索引第二个轴
- >>> y = np.arange(35).reshape(5,7)
- >>> y[np.array([0,2,4]),1:3]
- array([[ 1, 2],
- [15, 16],
- [29, 30]])
例 2:切片与布尔类型索引
- >>> y[b[:,5],1:3]
- array([[22, 23],
- [29, 30]])
例 1:使用 np.newwaxis 可以直接扩展维度
- >>> y.shape
- (5, 7)
- >>> y[:,np.newaxis,:].shape
- (5, 1, 7)
例 2:这是利用了扩展维度与广播特性的矩阵相加。用 5X1 矩阵与 1X5 矩阵相加。
- >>> x = np.arange(5)
- >>> x[:,np.newaxis] + x[np.newaxis,:]
- array([[0, 1, 2, 3, 4],
- [1, 2, 3, 4, 5],
- [2, 3, 4, 5, 6],
- [3, 4, 5, 6, 7],
- [4, 5, 6, 7, 8]])
例 3:使用 ... 符号来表示其他维度
- >>> z = np.arange(81).reshape(3,3,3,3)
- >>> z[1,...,2]
- array([[29, 32, 35],
- [38, 41, 44],
- [47, 50, 53]])
这例子也相当于下面的代码实现
- >>> z[1,:,:,2]
- array([[29, 32, 35],
- [38, 41, 44],
- [47, 50, 53]])
另有:
来源: http://www.bubuko.com/infodetail-1949000.html