Python基础学习(十五)

这篇博客详细介绍了NumPy数组的切片和索引操作,包括一维和二维数组的索引、切片赋值,以及如何改变数组的维度。内容涵盖正向和负向索引、步长设置,以及通过reshape、ravel和flatten方法转换数组维度。同时,还讨论了切片赋值的影响,强调了视图与深拷贝的区别。
摘要由CSDN通过智能技术生成

目录

numpy数组(三)

切片与索引

一维数组切片和索引的使用

二维数组的切片和索引使用

切片数组的赋值

改变数组的维度

将一维数组转换为多维

将多维数组转换为一维数组

numpy数组(三)

切片与索引

ndarray对象的内容可以通过索引或切片来访问和修改,于Python中的list的切片操作一样。

ndarray数组可以基于0-n的下标进行索引,并设置start、stop及step参数进行,从原函数组中切割出一个新数组。

一维数组切片和索引的使用

# 导入模块
import numpy as np
# 创建一维数组
a=np.arange(10)
print(a)

# 正向索引访问,索引从0开始,长度s
print("索引0处的元素:",a[0])
print("索引5处的元素:",a[5])

# 夫索引访问, 倒数第一个的索引为-1
print("访问最后一个元素:",a[-1])
print("访问倒数第三个元素:",a[-3])

# 切片操作  [start:stop:step]
print(a[:])     # 从开始到结尾
print(a[3:])     # 从索引3到结尾
print(a[3:5])   # 从索引3开始到索引4    [start,stop)结尾
print(a[1:7:2])     # 从索引1开始到索引6,步长是2

# 切片中负索引操作
print(a[::1])   # 反向获取
print(a[-5:-2])     # 从倒数第五个开始到倒数第三个结尾

二维数组的切片和索引使用

对一维数组进行修改形状,使其变为多维数组

使用坐标获取数组中的元素

# 导入numpy模块
import numpy as np
# 创建一维数组
a=np.arange(1,13)
print(a)
# 对一维数组进行修改形状
a=a.reshape((4,3))
print(a)
# 索引的使用
# 获取第三行
print(a[2])
# 获取第二行,第三列
print(a[1][2])

# 切片的使用[行进行切片,列进行切片] [start:stop:step, start:stop:step]
# 获取所有行所列
print(a[::])
# 获取所有行部分列 所有行第2列
print(a[:,1])
# 获取所有行部分列 所有行第1,2列
print(a[:,0:2])
# 获取部分行部分列 获取奇数行,第1,2列
print(a[::2, 0:2])

# 同时获取不同行不同列 获取第2行第3列 第3行第1列
print(a[1,2],a[2][0])
print(np.array(a[1,2],a[2][0]))
# 使用坐标
print(a[(2,3),(1,0)])

切片数组的赋值

所有切片取出来的数组,即使把它赋值给了新的变量,它仍全都是原来数组的视图

通过切片可以获取新数组,即使赋值给新的变量,但还是原来数组的视图。 如果对切片数组中元素的值进行修改会影响原来的数组

可以使用numpy中的copy方法实现进行深拷贝,向其copy方法出的数组元素赋值,其原数组的值不发生改变

# 导入numpy模块
import numpy as np
# 创建二维数组
a=np.arange(1,13).reshape((3,4))
print(a)
# 对a数组进行切片处理,获取第1、2行,第1、2列
sub_a=a[:2, :2]
print(sub_a)
# 对sub_a中第一行第一列的值进行修改
sub_a[0][0]=100
print(sub_a)
print(a)
# 通过切片可以获取新数组,即使赋值给新的变量,但还是原来数组的视图。
# 如果对切片数组中元素的值进行修改会影响原来的数组

# 可以使用numpy中的copy方法实现进行深拷贝
sub_aa=np.copy(a[:2, :2])
sub_aa[0][0]=200
print(sub_aa)
print(a)

改变数组的维度

处理数组的一项重要工作就是改变数组的维度,包含提高数组的维度和降低数组的维度,还包括数组的转置。Numpy提供的大量API可以很轻松地完成这些数组的操作。通过ravel方法或flatte方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置Numpy数组的shape属性(元组类型),通过resize方法也可以改变数组的维度

将一维数组转换为多维

# 导入numpy模块
import numpy as np
# 创建一维数组
a=np.arange(1,25)
print(a)
# 将一维数组修改为二维
# b=a.reshape(4,6)
b=a.reshape((4,6)) # 可直接设置行列,也可用元组表示
print(b)

# 将一维修改为三维
c=a.reshape((2,3,4))
print(c)

# 通过np.reshape()进行修改,维度设置必须用元组
# bb=np.reshape(a,(3,8 ))   # 将一维修改为二维
bb=np.reshape(a,(4,3,2))    # 将一维修改为三维
print(bb)

将多维数组转换为一维数组

# 导入numpy模块
import numpy as np
# 创建一维数组
a=np.arange(1,25)
print(a)

# 将多维数组修改为一维
# a=bb.reshape(24)    # 括号内填入数组所含元素的个数
a=bb.reshape(-1)
print(a)

# 通过ravel、flatten函数将多维数组转换为一维数组
# ravel
a=bb.ravel()
print(a)

# flatten
a=bb.flatten()
print(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

And ν

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值