本文是我用 jupter notebook 写完之后直接转的 markdown,也可以直接查看jupter notebook格式:
基本操作:https://tzs.lvliao.xyz/numpy_operation.html
矩阵运算:https://tzs.lvliao.xyz/numpy_computation.html
聚合运算:https://tzs.lvliao.xyz/numpy_aggregation.html
arg 运算:https://tzs.lvliao.xyz/numpy_arg.html
Fancy Indexing:https://tzs.lvliao.xyz/Fancy Indexing.html
import numpy as np
np.zeros(10) #创建10个0的数组
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros(10).dtype #查看类型
dtype('float64')
np.zeros(10,dtype=int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.zeros((3,5)) #创建3行5列元素全为0的矩阵
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
np.zeros(shape=(3,5),dtype=int)
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
np.ones(10) #创建10个1的数组
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.full((3,5),666) #创建3行5列元素全为666的矩阵
array([[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666]])
np.full((3,5),fill_value=666)
array([[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666]])
np.arange(0,1,0.2) #0开始,1结束步长为0.2,但是不包括1
array([0. , 0.2, 0.4, 0.6, 0.8])
np.arange(10) #默认从0开始1为步长,取10个数
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
linspace
np.linspace(0,20,11) #取0--20之间11个数,步长一致
array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20.])
np.linspace(0,20,10)
array([ 0. , 2.22222222, 4.44444444, 6.66666667, 8.88888889,
11.11111111, 13.33333333, 15.55555556, 17.77777778, 20. ])
random
np.random.randint(0,10) #0-10任意的整数
6
np.random.randint(0,10,6)#0-10取6个任意的整数,但不包括10
array([1, 9, 1, 9, 1, 5])
np.random.randint(4,100,size=(3,5))
array([[60, 15, 67, 47, 34],
[ 7, 5, 49, 66, 22],
[11, 42, 19, 97, 35]])
np.random.seed(666) #设置随机种子,随机种子一致的话,随机数也一致
np.random.randint(4,100,size=(3,5))
array([[ 6, 49, 34, 66, 74],
[77, 34, 40, 65, 95],
[98, 55, 64, 99, 32]])
np.random.seed(666)
np.random.randint(4,100,size=(3,5))
array([[ 6, 49, 34, 66, 74],
[77, 34, 40, 65, 95],
[98, 55, 64, 99, 32]])
np.random.random((3,5))
array([[0.09992856, 0.50806631, 0.20024754, 0.74415417, 0.192892 ],
[0.70084475, 0.29322811, 0.77447945, 0.00510884, 0.11285765],
[0.11095367, 0.24766823, 0.0232363 , 0.72732115, 0.34003494]])
#normal(loc=0.0,scale=1.0, size=None) loc 是均值,scale是标准差 ,size默认是None,输出一个数
np.random.normal(10,100,(3,5))
array([[ 82.9464519 , -22.69547657, 124.13367716, 55.24366191,
-213.49687669],
[ 137.04776598, -62.92882099, 145.9252547 , -110.99026555,
5.38172775],
[ -34.11824366, 56.95343143, 54.32581718, -156.73887544,
-171.73174936]])
np.random.normal?
# 查看normal文档
Numpy.array的基本操作
import numpy as np
x = np.arange(10) # 创建10个元素的数组,从0开始,步长为1
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
X = np.arange(15).reshape(3,5)
X
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
x.ndim #维度
1
X.ndim #维度
2
x.shape #只有一个维度并且有10个元素
(10,)
X.shape #有2个维度并第一个维度有3个元素,第二个维度有5个元素
(3, 5)
x.size #总共有多少个元素
10
X.size #总共有多少个元素
15
X[2, 2] #访问矩阵中的值
12
x[6]
6
x[0:5]
array([0, 1, 2, 3, 4])
x[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
X[:2,:3]
array([[0, 1, 2],
[5, 6, 7]])
X[:2, ::2]
array([[0, 2, 4],
[5, 7, 9]])
X[::-1, ::-2]
array([[14, 12, 10],
[ 9, 7, 5],
[ 4, 2, 0]])
X[::-1, ::-1]
array([[14, 13, 12, 11, 10],
[ 9, 8, 7, 6, 5],
[ 4, 3, 2, 1, 0]])
X[:,0]
array([ 0, 5, 10])
subX = X[:2, :3].copy() #用copy函数来取numpy中的子矩阵,如果直接用X[:2, :3]的话只是引用,改变子矩阵的值,原来的矩阵值也会变
subX
array([[0, 1, 2],
[5, 6, 7]])
Reshape
x.shape
(10,)
x.ndim
1
x.reshape(2,5)
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
x.ndim
1
A=x.reshape(2,5)
A
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
A.ndim
2
x.reshape(2,-1) # 指定分成2行,-1表示让程序自己计算能产生几列
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
合并操作
x = np.array([1,2,3])
y = np.array([4,5,6])
x
array([1, 2, 3])
y
array([4, 5, 6])
np.concatenate([x,y]) #只能拼接维度相同的矩阵
array([1, 2, 3, 4, 5, 6])
z = np.array([666,666,666])
np.concatenate([x,y,z])
array([ 1, 2, 3, 4, 5, 6, 666, 666, 666])
A = np.array([[1,2,3],
[4,5,6]])
np.concatenate([A, A])
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
np.concatenate([A, A],axis=1) # 按照第一个维度的方向拼接
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
np.concatenate([A, A],axis=0) # 按照第0个维度的方向拼接
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
np.concatenate([A, z.reshape(1,-1)])
array([[ 1, 2, 3],
[ 4, 5, 6],
[666, 666, 666]])
np.vstack([A,z]) #垂直方向拼接矩阵,维度可以不一样
array([[ 1, 2, 3],
[ 4, 5, 6],
[666, 666, 666]])
B = np.full((2,2),100)
B
array([[100, 100],
[100, 100]])
np.hstack([A,B]) #水平方向拼接矩阵,维度可以不一样
array([[ 1, 2, 3, 100, 100],
[ 4, 5, 6, 100, 100]])
分割操作
x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x1, x2, x3 = np.split(x,[3,7]) #以元素3,7分割数组
x1
array([0, 1, 2])
x2
array([3, 4, 5, 6])
x3
array([7, 8, 9])
x4,x5 = np.split(x,[5]) #以元素5分割数组
x4
array([0, 1, 2, 3, 4])
x5
array([5, 6, 7, 8, 9])
A1 = np.arange(16).reshape(4,4)
A1
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
a1, a2 = np.split(A1,[2]) # 二维切割前两行
a1
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
a2
array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])
a1, a2 = np.split(A1,[2],axis=1) # 二维切割前两列
a1
array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]])
a2
array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])
upper,lower = np.vsplit(A1,[2]) # 垂直方向切
upper
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
lower
array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])
left,right = np.hsplit(A1,[2]) # 水平方向切
left
array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]])
right
array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])
个人博客:numpy 的基本操作语法
ヾ( ̄▽ ̄)Bye~~Bye~