目录
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)