【学习笔记】Numpy数组的基础操作

数组属性

#设定种子值,使每次得到相同随机数组
np.random.seed(1)

x1=np.random.randint(10,size=6)	#一维数组
x2=np.random.randint(10,size=(3,4))	#二维数组
x3=np.random.randint(10,size=(3,4,5))	#三维数组
print("x3的维度:",x3.ndim)
print("x3每个维度的大小:",x3.shape)
print("x3的总大小:",x3.size)
print("x3的数据类型",x3.dtype)
print("x3每个元素的字节大小",x3.itemsize,'bytes')
print("x3的总字节大小",x3.nbytes,'bytes')

'''
运行结果
x3的维度: 3
x3每个维度的大小: (3, 4, 5)
x3的总大小: 60
x3的数据类型 int32
x3每个元素的字节大小 4 bytes
x3的总字节大小 240 bytes
'''

数组索引

#一维数组索引
print(x1)
print(x1[0],x1[4])
print(x1[-1],x1[-2])	#从末尾索引,-1为最后一个元素
#多维数组索引
print(x2)
print(x2[0,0],x2[-1,-1])

'''
运行结果
[5 8 9 5 0 0]
5 0
0 0
[[1 7 6 9]
 [2 4 5 2]
 [4 2 4 7]]
1 7
'''

数组切片

注意:Numpy中数组切片返回的是视图,即修改切片后的数组影响原始数组。而python列表切片返回的是副本,修改切片不会影响原始数组。

#一维数组切片
x1[start:stop:step]
#多维数组切片
x2[start:stop:step,start:stop:step]
#创建数组的副本
x2_sub_copy=x2[:2,:2].copy()

一维数组切片

#一维数组切片
x=np.arange(10)
print(x)
print(x[:5])	#前五个元素
print(x[5:])	#索引五后的元素
print(x[4:7])	#索引[4,7)的元素
print(x[::2])	#每隔一个元素
print(x[1::2])	#每隔一个元素,从索引一开始
print(x[::-1])	#逆序
print(x[5::-2])	#从索引五开始每隔一个元素逆序

'''
运行结果
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4]
[5 6 7 8 9]
[4 5 6]
[0 2 4 6 8]
[1 3 5 7 9]
[9 8 7 6 5 4 3 2 1 0]
[5 3 1]
'''

多维数组切片

'''
#多维数组切片
x2=np.random.randint(10,size=(3,4))
print(x2)
print(x2[:2,:3])	#两行三列
print(x2[:3,::2])	#所有行,每隔一列
print(x2[::-1,::-1])	#行和列同时逆序
print(x2[:,0])	#第一列
print(x2[0,:])	#第一行
print(x2[0])	#等于x2[0,:]

运行结果
[[0 8 7 7]
 [1 1 3 0]
 [8 6 4 5]]
[[0 8 7]
 [1 1 3]]
[[0 7]
 [1 3]
 [8 4]]
[[5 4 6 8]
 [0 3 1 1]
 [7 7 8 0]]
[0 1 8]
[0 8 7 7]
[0 8 7 7]
'''

创建副本

#创建副本,并对其修改
x=np.arange(10)
print(x)
x_sub_copy=x[:2]	#创建副本
print(x_sub_copy)
x_sub_copy[0]=99
print(x_sub_copy)
print(x)	#副本修改后影响原始数组

'''
运行结果
[0 1 2 3 4 5 6 7 8 9]
[0 1]
[99  1]
[99  1  2  3  4  5  6  7  8  9]
'''

数组变形

#数组变形
x=np.arange(9).reshape((3,3))
print(x)
#一维数组转换成二维行或列的矩阵
x=np.array([1,2,3])
print(x)
print(x.reshape((1,3)))	#行向量
print(x[np.newaxis,:])	#通过newaxis获得的行向量
print(x.reshape((3,1)))	#列向量
print(x[:,np.newaxis])	#通过newaxis获得的列向量

'''
运行结果
[1 2 3]
[[1 2 3]]
[[1 2 3]]
[[1]
 [2]
 [3]]
[[1]
 [2]
 [3]]
'''

数组拼接

#一维数组拼接
x=np.array([1,2,3])
y=np.array([3,2,1])
print(np.concatenate([x,y]))
#二维数组拼接
grid=np.array([[1,2,3],
			   [4,5,6]])
print(np.concatenate([grid,grid]))	#按第一个轴拼接
print(np.concatenate([grid,grid],axis=1))	#按第二个轴拼接

#垂直栈、水平栈
x=np.array([1,2,3])
grid=np.array([[9,8,7],
			   [6,5,4]])
print(np.vstack([x,grid]))	#垂直栈数组,增加行
y=np.array([[99],
		   [99]])
print(np.hstack([y,grid]))	#水平栈数组,增加列
z=np.array([4,5,6])

'''
运行结果
[1 2 3 3 2 1]
[[1 2 3]
 [4 5 6]
 [1 2 3]
 [4 5 6]]
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]]
[[1 2 3]
 [9 8 7]
 [6 5 4]]
[[99  9  8  7]
 [99  6  5  4]]

'''

数组分裂

#数组分裂
x=[1,2,3,99,99,3,2,1]
x1,x2,x3=np.split(x,[3,5])	#[3,5]是索引,表示分裂点的位置
print(x1,x2,x3)
grid=np.arange(16).reshape((4,4))
print(grid)
upper,lower=np.vsplit(grid,[2])	#按行分裂
print(upper)
print(lower)
left,right=np.hsplit(grid,[2])	#按列分裂
print(left)
print(right)

'''
运行结果
[1 2 3] [99 99] [3 2 1]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[0 1 2 3]
 [4 5 6 7]]
[[ 8  9 10 11]
 [12 13 14 15]]
[[ 0  1]
 [ 4  5]
 [ 8  9]
 [12 13]]
[[ 2  3]
 [ 6  7]
 [10 11]
 [14 15]]
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值