2.2.3.4 数组的索引、切片
和列表和其它Python序列一样,一维数组可以进行索引、切片和迭代操作。
>>> a= np.arange(10)** 3 #记住,操作符是对数组中逐元素处理的!#求立方 >>> a array([0, 1, 8, 27, 64, 125, 216, 343, 512, 729]) >>> a[2] 8 >>> a[2:5] array([ 8, 27, 64]) #取下标2和5之间的值,包括2,但不包括5 >>> a[:6:2]= -1000 # 等同于a[0:6:2]= -1000,从开始到第6个位置(但 不包括第6个位置),每隔一个元素将其赋值为-1000 >>> a array([-1000, 1,-1000, 27,-1000, 125, 216, 343, 512, 729]) >>> a[: :-1] # 反转a array([ 729, 512, 343, 216, 125,-1000, 27,-1000, 1,-1000]) >>>for i in a: ... print i**2, ... 1000000 1 1000000 729 1000000 15625 46656 117649 262144 531441 |
多维数组可以每个轴有一个索引。这些索引由一个逗号分割的元组给出。
>>>def f(x,y): ... return 10*x+y ... >>> b= np.fromfunction(f,(5,4),dtype=int) #fromfunction()是一个函数 >>> b array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]]) >>> b[2,3] 23
>>> b[0:5, 1] # 每行的第二个元素 array([ 1, 11, 21, 31, 41])
>>> b[: ,1] # 与前面的效果相同 array([ 1, 11, 21, 31, 41])
>>> b[1:3,: ] # 每列的第二和第三个元素 array([[10, 11, 12, 13], [20, 21, 22, 23]]) |
当少于提供的索引数目少于轴数时,已给出的数值按秩的顺序复制,缺失的索引则默认为是整个切片:
>>> b[-1] # 最后一行,等同于b[-1,:],-1是第一个轴,而缺失的认为是:,相当于整个切片。 array([40, 41, 42, 43]) |
b[i]中括号中的表达式被当作i和一系列":",来代表剩下的轴。NumPy也允许你使用“点”像b[i,...]。
点(…)代表许多产生一个完整的索引元组必要的冒号。如果x是秩为5的数组(即它有5个轴),那么:
l x[1,2,…] 等同于 x[1,2,:,:,:],
l x[…,3] 等同于 x[:,:,:,:,3]
l x[4,…,5,:] 等同 x[4,:,:,5,:]
>>> c= array( [ [[ 0, 1, 2], #三维数组(n个2维数组叠加而成) ...[ 10, 12, 13]], ... ...[[100,101,102], ...[110,112,113]]] ) >>> c.shape (2, 2, 3) >>> c[1,...] #等同于c[1,:,:]或c[1] array([[100, 101, 102], [110, 112, 113]]) >>> c[...,2] #等同于c[:,:,2] array([[ 2, 13], [102, 113]]) |