您的位置:首页 > 编程语言 > Python开发

数组的基本运算(2)

2017-04-06 17:53 113 查看

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]])

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习 numpy