1. 存取元素
1.1 通过下标索引
a = np.arange(10)
a[5]
Out[5]: 5 # 下标从0开始
a[3:5]
Out[6]: array([3, 4]) # 通过范围索引,默认步长为1,不包括终值
a[:5]
Out[7]: array([0, 1, 2, 3, 4]) # 可以不指定初值
a[-1]
Out[8]: 9 # -1是最后一个元素的索引
a[:-1]
Out[9]: array([0, 1, 2, 3, 4, 5, 6, 7, 8]) # 从第一个到最后一个,不包括终值
a[2:4]= 10, 11 # 可以通过索引赋值
a
Out[11]: array([ 0, 1, 10, 11, 4, 5, 6, 7, 8, 9])
a[1:-1:2]
Out[12]: array([ 1, 11, 5, 7]) # 从第一个到最后一个,步长2,不包括终值
a[1]
Out[13]: 1
a[::-1]
Out[14]: array([ 9, 8, 7, 6, 5, 4, 11, 10, 1, 0]) # 从第最后一个到第一个,包括终止
a[5:1:-2]
Out[15]: array([ 5, 11]) # 逆序,不包括终值
不过这种方式获得的新数组与原数组共享同一块内存
切记:必须是[],不能像matlab那样()
1.2 通过列表获取元素
a = np.arange(10)
b = a[[0, 2, 4, 6, 8]]
b[0] = 1;b
Out[27]: array([1, 2, 4, 6, 8])
a
Out[28]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
这种方式获得的是独立的新数组,比较推荐
1.3 使用布尔数组
a = np.arange(5,0,-1)
a[np.array([True,False,True,False,False])];a
Out[35]: array([5, 4, 3, 2, 1])
a = np.random.rand(10) # 生成10个(0,1)的随机数
a[a>0.5]
Out[37]:
array([ 0.57716176, 0.90890871, 0.63922297, 0.63499173, 0.73557487,
0.56008627, 0.72576258])
通过布尔数组获得的也是独立的新数组,和matlab里的a(a>0)有点相似
创建布尔数组可以np.array([1,0,1,0],dtype=np.bool),这样方便些