- 安装,
pip install numpy
- 导入
import numpy as np
- 创建数组
arr = np.array([1,2,3,4,5])
arr
out:array([1, 2, 3, 4, 5])
- 创建一个三维的空数组,里面的数据时内存中残留的内容
np.empty((2,3,2))
array([[[1.59187215e-312, 0.00000000e+000],
[1.41537862e+161, 5.22182633e+180],
[7.33952596e+223, 4.27255707e+180]],
[[7.04850274e-120, 4.90900659e+252],
[3.88621453e+285, 2.91237123e+257],
[4.71294503e+257, 2.59818825e-306]]])
- 创建从0-20公差为2的一维数组
np.arange(0,20,2)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
- 生成从0到2均分的五个数
np.linspace(0,2,5)
array([0. , 0.5, 1. , 1.5, 2. ])
- 创建3*3的在0-1之间均匀分布的随机数组
np.random.random((3,3))
array([[0.29680299, 0.19137578, 0.26913372],
[0.23225081, 0.52695982, 0.82736975],
[0.13357885, 0.6480721 , 0.29805271]])
-
创建3*3的、均值为0,方差为1的正态分布随机数
np.random.normal(0,1,(3,3))
array([[ 0.71021081, -0.68369742, -0.4169674 ],
[ 0.04374575, 0.42580965, -2.02402947],
[ 0.31068114, -0.79955925, -0.36962168]])
- 0-10随机数,3*3
np.random.randint(1,10,(3,3))
array([[8, 9, 8],
[6, 2, 9],
[5, 1, 2]])
- 单位矩阵
np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
- 数据类型转换 变量.astype(np.数据类型),会返回一个原始数组的拷贝
arr = np.array([1,2,3,4,5])
arr.dtype
out:dtype('int32')
float_arr = arr.astype(np.float64)
float_arr
out:array([1., 2., 3., 4., 5.])
- 小数转换为整数会直接截掉小数部分
arr = np.array([1.2,4.5,6.8])
arr
out:array([1.2, 4.5, 6.8])
arr.astype(np.int32)
out:array([1, 4, 6])
- 字符串不能直接转换为整数
arr=np.array(['1.2'])
#先转换为float型再转换为整数
arr.astype(np.float).astype(np.int32)
out:array([1])
- 创建一个包含10个随机数的3*4的矩阵
x=np.random.randint(10,size=(3,4))
x
out:array([[5, 0, 3, 3],
[7, 9, 3, 5],
[2, 4, 7, 6]])
- 数组的选取:选取后是原数组的视图而不是拷贝,省内存
数组的索引
#一维数组
x=np.array([1,2,3,4,5,6])
x
out:array([1, 2, 3, 4, 5, 6])
x[0]---->1
x[-1]---->6
#二维数组一样
x=np.random.randint(10,size=(3,4))
x
out:
array([[8, 8, 1, 6],
[7, 7, 8, 1],
[5, 9, 8, 9]])
#x[行,列]
#第二行倒数第一列
x[2][-1]
out:9
- 数组的切片
# x[start:stop:step] x[从哪开始,到哪结束,步长值]
#一维数组
x=np.arange(0,20,2)
x
out:array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
#从第一个元素开始,到最后一个元素结束但不包括最后一个元素,左闭右开
x[0:-1:2]
out:array([ 0, 4, 8, 12, 16])
x[:] #获取所有值
out:array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
#二维数组x[行:start:stop:step,列:start:stop:step]
x=np.random.randint(10,size=(3,4))
x
out:
array([[4, 3, 3, 2],
[0, 4, 8, 9],
[9, 5, 8, 8]])
# 选取数组的前两行和前三列
x[:2,:3]
out:
array([[4, 3, 3],
[0, 4, 8]])
#选取第一行
x[0,:]
out:array([4, 3, 3, 2])
#第一列
x[:,0]
OUT:
array([4, 0, 9])
# 旋转一百八十多度
x[::-1,::-1]
OUT:
array([[8, 8, 5, 9],
[9, 8, 4, 0],
[2, 3, 3, 4]])
# 调用copy()方法创建副本
x_cp=x.copy()
x_cp
out:
array([[4, 3, 3, 2],
[0, 4, 8, 9],
[9, 5, 8, 8]])
- 变换数组 : reshape()方法
arr = np.arange(1,10)
arr
out:array([1, 2, 3, 4, 5, 6, 7, 8, 9])
arr.reshape((3,3))
out:array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 数组拼接
m=np.array([1,2,3])
n=np.array([3,2,1])
np.concatenate([m,n])
out:
array([1, 2, 3, 3, 2, 1])
#按轴axis拼接,默认axis=0,得到下面的结果,属于垂直拼接
grid = np.arange(1,7).reshape(2,3)
grid
out:
array([[1, 2, 3],
[4, 5, 6]])
np.concatenate([grid,grid])
out:
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
#axis=1时水平拼接
np.concatenate([grid,grid],axis=1)
out:
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
# 垂直栈拼接 vstack()
np.vstack([grid,grid])
out:
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
# 水平栈拼接 : hstack()
np.hstack([grid,grid])
out:
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
- 数组的分割
x=np.random.randint(12,size=(12,))
x
out:array([11, 2, 9, 11, 7, 2, 7, 5, 8, 0, 10, 5])
y1,y2,y3=np.split(x,[4,8])
print(y1,y2,y3)
OUT:
[11 2 9 11] [7 2 7 5] [ 8 0 10 5]
# 垂直栈和水平栈分割
x=np.random.randint(16,size=(4,4))
x
out:
array([[ 7, 10, 10, 5],
[ 9, 1, 2, 4],
[15, 14, 13, 12],
[11, 0, 12, 0]])
a_up,a_dn=np.vsplit(x,[2])
a_up
out:
array([[ 7, 10, 10, 5],
[ 9, 1, 2, 4]])
a_dn
out:
array([[15, 14, 13, 12],
[11, 0, 12, 0]])
水平栈分割
a_l,a_r=np.hsplit(x,[2])
a_l
out:
array([[ 7, 10],
[ 9, 1],
[15, 14],
[11, 0]])
a_r
out:array([[10, 5],
[ 2, 4],
[13, 12],
[12, 0]])