Bootstrap

numpy基本用法讲解

1.创建数组的方法:

最基本:a=np.array([1,2]),将传入的python列表转化为np数组,注意:源数据是ndarray数据时,array是创建一个新的数组,而 asarray仍旧使用原来的数据源。所以使用asarray创建的数组改变时,原数组也改变了,一般我们都用array.

import numpy as np
a=np.arange(0,10,2)#创建起始为0,结束为10,但是不包括10,步长为2的序列
#a: [0 2 4 6 8]
b=np.ones([2,3])#创建元素全为1的矩阵
#b: [[1. 1. 1.]
#   [1. 1. 1.]]
c=np.zeros([1,3])#创建元素全为0的矩阵
#c: [[0. 0. 0.]]
d=np.eye(3,5)#创建单位矩阵
#d: [[1. 0. 0. 0. 0.]
# [0. 1. 0. 0. 0.]
# [0. 0. 1. 0. 0.]]
e=np.linspace(2,6,3)#创建2为首项,6为尾项,共3个元素(start,stop,num)
#e: [2. 4. 6.]
f=np.logspace(2,8,3,base=2)#创建一个底数为2,首项为2^1,尾项为2^8,共3个元素,如果未指定base的话默认为10        注意:1.e+05  就是0.00005
#f: [  4.  32. 256.]

2.数组的切片操作及改变数组形状的方法

import numpy as np
b=np.array([[1,2],[2,4],[3,1]])
c=b[0:2,:]#数组切片中,取前不取后,前面数字省略从0取,后面数字胜率,从最后取.  -1代表最后一个位置的元素。
'''输出c: [[1 2]
        [2 4]]'''
d=b.reshape(2,3)#创建一个新的数组,不改变原来数组的形状
#注意:reshape(-1,2)中的-1代表不知道是几,系统根据数组中元素数量自动匹配。
'''输出d:[[1 2 2]
        [4 3 1]]'''
b.resize(1,6)#改变原来数组的形状
'''输出b:[[1 2 2 4 3 1]]'''

可以通过c=np.arange(20).reshape(4,5)快捷的创建数组

3.矩阵运算

1.数组间的+,-,*,/ 都是数组中对应元素相互加减乘除。
2.c=np.matmul(A,B)或者c=np.dot(A,B)都是计算矩阵之间的乘法。
3.c=np.transpose(A)求矩阵A的转置。
4.c=np.linalg.inv(A)求矩阵A的逆矩阵。

4.数组中元素运算操作

1.数组中元素求和

import numpy as np
a=[[1,2,3],[2,4,6]]
b=np.sum(a)#对数组a中的所有元素求和
'''输出:  18'''
#轴:数组中的每一个维度称为一个轴(由0开始)
#秩:轴的个数(注意与线性代数中的秩区分)
c=np.sum(a,axis=1)#将第二个轴相加
'''输出:[6,12]'''

以下的运算用的都是这里面的数组a

2.数组中元素求乘积

d=np.prod(a)
'''输出: 288'''

3.相邻差

d=np.diff(a)
'''输出: [[1 1]
        [2 2]]'''

4.计算平方根(就是开根号)

d=np.sqrt(a)#square root平方根

5.计算各元素指数值(就是e的元素次方)

d=np.exp(a)

6.计算各元素绝对值:

d=np.abs(a)

7.数组堆叠运算

a=np.stack((x,y),axis=0)#在轴0上堆叠,数组由外到内维度升高,注意堆叠和求和的区别,堆叠不求和。

5.矩阵及矩阵运算(处理矩阵问题一般都是用numpy库)

1.创建矩阵:

a=np.mat('1,2,3;4,5,6')#矩阵:matrix
#或者是a=np.mat([[1,2,3],[4,5,6]])
print(type(a),a)
'''<class 'numpy.matrix'> [[1 2 3]
 						[4 5 6]]'''

2.矩阵转置

b=a.T#这里的a可以是数组或者矩阵,但是不能是列表。输出转置的数据类型与传入的数据相同,即a是数组,b就是数组,a是矩阵,b就是矩阵。
b=np.transpose(a)#这里的a可以是矩阵,列表或者数组,如果传入的数据是数组或列表,则传出的数据是数组;如果传入的是矩阵,则传出的是矩阵

推荐用np.transpose,避免报错。
矩阵:matrix ;列表:list ;数组:array

3.矩阵求逆(注意,求逆的矩阵必须是方阵,否则会报错)

b=a.I#传入的只能是矩阵
b=np.linalg.inv(a)#传入的只能是矩阵或者数组,输出的数据类型与输入相同。

同样,推荐使用numpy库中的np.linalg.inv()方法.

6.随机数(随机数模块np.random)

  1. 创建随机数a=np.random.rand(2,3),产生一个2*3的随机数数组,取值是在[0,1)之间的均匀分布的浮点数,如果不传入参数则随机返回一个数字。
  2. a=np.random.uniform(1,5,(2,3)),产生一个2*3的随机数组,取值在1到5之间的浮点数,如果要产生整数类型的话,就用a=np.random.randint(1,5,(2,3))就行。
  3. a=np.random.randn(1,6)产生一个2*3的数组,符合标准正态分布(就是期望值μ=0,即曲线图象对称轴为Y轴,标准差σ=1条件下的正态分布)
  4. a=np.random.normal(1,3,(3,2))产生一个均值为1,标准差为3的3*2的随机数组,注意是随机数组,只是他的值以均值为中心,并不是产生数组的的值的平均数就是1.这个与tensorflow中的tf.random.normal()的作用是一样的,只不过tf模块中产生的是张量,np中产生的是np数组。在这里插入图片描述
  5. 设置随机种子:np.random.seed(0),这里设置随机算法的开始值为0,则每一次以0为开始值的随机算法,生成的随机数都是相同的(即每个随机种子对应一组固定的随机数),注意,随机种子只起一次作用,即随机种子只能保证随机种子的下一条语句产生的随机数不变,想要多数随机数不变,只需要在相应位置设置多个开始值相同的随机种子即可。
  6. 打乱数组顺序np.random.shuffle(a)如果是数组只打乱第一维,即axis=0.若果需要全部打乱就将数组resize一下就行。

numpy的基本用法就到这里了,注意numpy的random模块与tensorflow的random模块有诸多相同之处,注意区分。

在这里插入图片描述

;