数组的基本运算(2)

本文介绍了一维及多维NumPy数组的索引、切片与迭代操作方法,包括基本的一维数组操作、多维数组的索引方式以及特殊的省略号(...)用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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个轴),那么:

x[1,2,…] 等同于 x[1,2,:,:,:],  

x[…,3] 等同于 x[:,:,:,:,3]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值