python第三方库numpy-Python第三方库之Numpy库

易知大学任务(2)成绩表雷达分析图

概述

Numpy 最基本的库,是用于处理含有同种元素的多维数组运算的第三方库

—科学计算包,python数据分析及科学计算的基础库,几乎支撑所有其他库

—支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成等功能

—可与C++/Fortran语言无缝结合。树莓派Python v3默认安装已经包含了numpy。

本笔记包含以下内容

一、导入模块 二、生成数组 三、运算函数 四、数组与数值的运算

五、数组与数组的运算 六、转置 七、点积/内积 八、数组元素访问

九、数组支持函数运算 十、改变数组大小 十一、切片操作 十二、布尔运算

十三、取整运算 十四、广播 十五、分段函数 十六、计算唯一值以及出现次数

十七、矩阵运算 十八、矩阵不同维度上的计算

一、导入模块

>>> import numpy as np

二、生成数组

1966867-20200506171750704-616306266.png

>>> np.array([1, 2, 3, 4, 5]) # 把列表转换为数组

array([1, 2, 3, 4, 5])

>>> np.array((1, 2, 3, 4, 5)) # 把元组转换成数组

array([1, 2, 3, 4, 5])

>>> np.array(range(5)) # 把range对象转换成数组

array([0, 1, 2, 3, 4])

>>> np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组

array([[1, 2, 3],

[4, 5, 6]])

>>> np.arange(8) # 类似于内置函数range()

array([0, 1, 2, 3, 4, 5, 6, 7])

>>> np.arange(1, 10, 2)

array([1, 3, 5, 7, 9])

>>> np.linspace(0, 10, 11) # 等差数组,包含11个数

array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])

>>> np.linspace(0, 10, 11, endpoint=False) # 不包含终点

array([ 0. , 0.90909091, 1.81818182, 2.72727273, 3.63636364,

4.54545455, 5.45454545, 6.36363636, 7.27272727, 8.18181818,

9.09090909])

>>> np.logspace(0, 100, 10) # 对数数组

array([ 1.00000000e+000, 1.29154967e+011, 1.66810054e+022,

2.15443469e+033, 2.78255940e+044, 3.59381366e+055,

4.64158883e+066, 5.99484250e+077, 7.74263683e+088,

1.00000000e+100])

>>> np.logspace(1,6,5, base=2) # 对数数组,相当于2 ** np.linspace(1,6,5)

array([ 2. , 4.75682846, 11.3137085 , 26.90868529, 64. ])

>>> np.zeros(3) # 全0一维数组

array([ 0., 0., 0.])

>>> np.ones(3) # 全1一维数组

array([ 1., 1., 1.])

>>> np.zeros((3,3)) # 全0二维数组,3行3列

[[ 0. 0. 0.]

[ 0. 0. 0.]

[ 0. 0. 0.]]

>>> np.zeros((3,1)) # 全0二维数组,3行1列

array([[ 0.],

[ 0.],

[ 0.]])

>>> np.zeros((1,3)) # 全0二维数组,1行3列

array([[ 0., 0., 0.]])

>>> np.ones((1,3)) # 全1二维数组

array([[ 1., 1., 1.]])

>>> np.ones((3,3)) # 全1二维数组

array([[ 1., 1., 1.],

[ 1., 1., 1.],

[ 1., 1., 1.]])

>>> np.identity(3) # 单位矩阵

array([[ 1., 0., 0.],

[ 0., 1., 0.],

[ 0., 0., 1.]])

>>> np.identity(2)

array([[ 1., 0.],

[ 0., 1.]])

>>> np.empty((3,3)) # 空数组,只申请空间而不初始化,元素值是不确定的

array([[ 0., 0., 0.],

[ 0., 0., 0.],

[ 0., 0., 0.]])

三、运算函数

(1)算术运算函数

1966867-20200506171824002-1499436518.png

(2)比较运算函数

1966867-20200506171842403-1738947708.png

(3)其他运算函数

1966867-20200506171856583-298555109.png

四、数组与数值的运算

>>> x = np.array((1, 2, 3, 4, 5)) # 创建数组对象

>>> x

array([1, 2, 3, 4, 5])

>>> x * 2 # 数组与数值相乘,返回新数组

array([ 2, 4, 6, 8, 10])

>>> x / 2 # 数组与数值相除

array([ 0.5, 1. , 1.5, 2. , 2.5])

>>> x // 2 # 数组与数值整除

array([0, 1, 1, 2, 2], dtype=int32)

>>> x ** 3 # 幂运算

array([1, 8, 27, 64, 125], dtype=int32)

>>> x + 2 # 数组与数值相加

array([3, 4, 5, 6, 7])

>>> x % 3 # 余数

array([1, 2, 0, 1, 2], dtype=int32)

>>> 2 ** x

array([2, 4, 8, 16, 32], dtype=int32)

>>> 2 / x

array([2. ,1. ,0.66666667, 0.5, 0.4])

>>> 63 // x

array([63, 31, 21, 15, 12], dtype=int32)

五、数组与数组的运算

>>> a = np.array((1, 2, 3))

>>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))

>>> c = a * b # 数组与数组相乘

>>> c # a中的每个元素乘以b中的对应列元素

array([[ 1, 4, 9],

[ 4, 10, 18],

[ 7, 16, 27]])

>>> c / b #np.devide(,) # 数组之间的除法运算

array([[ 1., 2., 3.],

[ 1., 2., 3.],

[ 1., 2., 3.]])

>>> c / a

array([[ 1., 2., 3.],

[ 4., 5., 6.],

[ 7., 8., 9.]])

>>> a + a #np.add(,) # 数组之间的加法运算

array([2, 4, 6])

>>> a * a # 数组之间的乘法运算

array([1, 4, 9])

>>> a - a # 数组之间的减法运算

array([0, 0, 0])

>>> a / a # 数组之间的除法运算

array([ 1., 1., 1.])

六、转置

>>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))

>>> b

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> b.T # 转置

array([[1, 4, 7],

[2, 5, 8],

[3, 6, 9]])

>>> a = np.array((1, 2, 3, 4))

>>> a

array([1, 2, 3, 4])

>>> a.T # 一维数组转置以后和原来是一样的

array([1, 2, 3, 4])

七、点积/内积

>>> a = np.array((5, 6, 7))

>>> b = np.array((6, 6, 6))

>>> a.dot(b) # 向量内积

108

>>> np.dot(a,b)

108

>>> c = np.array(([1,2,3],[4,5,6],[7,8,9])) # 二维数组

>>> c.dot(a) # 二维数组的每行与一维向量计算内积

array([ 38, 92, 146])

>>> a.dot(c) # 一维向量与二维向量的每列计算内积

array([78, 96, 114])

八、数组元素访问

>>> b = np.array(([1,2,3],[4,5,6],[7,8,9]))

>>> b

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> b[0] # 第0行

array([1, 2, 3])

>>> b[0][0] # 第0行第0列的元素值

1

>>> b[0,2] # 第0行第2列的元素值

3

>>> b[[0,1]] # 第0行和第1行

array([[1, 2, 3],

[4, 5, 6]])

>>> b[[0,1], [1,2]] #第0行第1列的元素和第1行第2列的元素

array([2, 6])

>>> x = np.arange(0,100,10,dtype=np.floating)

>>> x

array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.])

>>> x[[1, 3, 5]] # 同时访问多个位置上的元素

array([ 10., 30., 50.])

>>> x[[1, 3, 5]] = 3 # 把多个位置上的元素改为相同的值

>>> x

array([ 0., 3., 20., 3., 40., 3., 60., 70., 80., 90.])

>>> x[[1, 3, 5]] = [34, 45, 56] # 把多个位置上的元素改为不同的值

>>> x

array([ 0., 34., 20., 45., 40., 56., 60., 70., 80., 90.])

九、数组支持函数运算

>>> x = np.arange(0, 100, 10, dtype=np.floating)

>>> np.sin(x) # 一维数组中所有元素求正弦值

array([ 0. , -0.54402111, 0.91294525, -0.98803162, 0.74511316,

-0.26237485, -0.30481062, 0.77389068, -0.99388865, 0.89399666])

>>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))

>>> np.cos(b) # 二维数组中所有元素求余弦值

array([[ 0.54030231, -0.41614684, -0.9899925 ],

[-0.65364362, 0.28366219, 0.96017029],

[ 0.75390225, -0.14550003, -0.91113026]])

>>> np.round(_) # 四舍五入

array([[ 1., -0., -1.],

[-1., 0., 1.],

[ 1., -0., -1.]])

>>> x = np.random.rand(10) * 10 # 包含10个随机数的数组

>>> x

array([ 2.16124573, 2.58272611, 6.18827437, 5.21282916, 4.06596404,

3.34858432, 5.60654631, 9.49699461, 1.68564166, 2.9930861 ])

>>> np.floor(x) # 所有元素向下取整

array([ 2., 2., 6., 5., 4., 3., 5., 9., 1., 2.])

>>> np.ceil(x) # 所有元素向上取整

array([ 3., 3., 7., 6., 5., 4., 6., 10., 2., 3.])

十、改变数组大小

>>> a = np.arange(1, 11, 1)

>>> a

array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

>>> a.shape = 2, 5 # 改为2行5列

>>> a

array([[ 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10]])

>>> a.shape = 5, -1 # -1表示自动计算,原地修改

>>> a

array([[ 1, 2],

[ 3, 4],

[ 5, 6],

[ 7, 8],

[ 9, 10]])

>>> b = a.reshape(2,5) # reshape()方法返回新数组

>>> b

array([[ 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10]])

十一、切片操作

>>> a = np.arange(10)

>>> a

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> a[::-1] # 反向切片

array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

>>> a[::2] # 隔一个取一个元素

array([0, 2, 4, 6, 8])

>>> a[:5] # 前5个元素

array([0, 1, 2, 3, 4])

>>> c = np.arange(25) # 创建数组

>>> c.shape = 5,5 # 修改数组大小

>>> c

array([[ 0, 1, 2, 3, 4],

[ 5, 6, 7, 8, 9],

[10, 11, 12, 13, 14],

[15, 16, 17, 18, 19],

[20, 21, 22, 23, 24]])

>>> c[0, 2:5] # 第0行中下标[2,5)之间的元素值

array([2, 3, 4])

>>> c[1] # 第0行所有元素

array([5, 6, 7, 8, 9])

>>> c[2:5, 2:5] # 行下标和列下标都介于[2,5)之间的元素值

array([[12, 13, 14],

[17, 18, 19],

[22, 23, 24]])

十二、布尔运算

>>> x = np.random.rand(10) # 包含10个随机数的数组

>>> x

array([ 0.56707504, 0.07527513, 0.0149213 , 0.49157657, 0.75404095,

0.40330683, 0.90158037, 0.36465894, 0.37620859, 0.62250594])

>>> x > 0.5 # 比较数组中每个元素值是否大于0.5

array([ True, False, False, False, True, False, True, False, False, True], dtype=bool)

>>> x[x>0.5] # 获取数组中大于0.5的元素,可用于检测和过滤异常值

array([ 0.56707504, 0.75404095, 0.90158037, 0.62250594])

>>> x < 0.5

array([False, True, True, True, False, True, False, True, True, False], dtype=bool)

>>> np.all(x<1) # 测试是否全部元素都小于1

True

>>> np.any([1,2,3,4]) # 是否存在等价于True的元素

True

>>> np.any([0])

False

>>> a = np.array([1, 2, 3])

>>> b = np.array([3, 2, 1])

>>> a > b # 两个数组中对应位置上的元素比较

array([False, False, True], dtype=bool)

>>> a[a>b]

array([3])

>>> a == b

array([False, True, False], dtype=bool)

>>> a[a==b]

array([2])

十三、取整运算

>>> x = np.random.rand(10)*50 # 10个随机数

>>> x

array([ 43.85639765, 30.47354735, 43.68965984, 38.92963767,

9.20056878, 21.34765863, 4.61037809, 17.99941701,

19.70232038, 30.05059154])

>>> np.int64(x) # 取整

array([43, 30, 43, 38, 9, 21, 4, 17, 19, 30], dtype=int64)

>>> np.int32(x)

array([43, 30, 43, 38, 9, 21, 4, 17, 19, 30])

>>> np.int16(x)

array([43, 30, 43, 38, 9, 21, 4, 17, 19, 30], dtype=int16)

>>> np.int8(x)

array([43, 30, 43, 38, 9, 21, 4, 17, 19, 30], dtype=int8)

十四、广播

>>> a = np.arange(0,60,10).reshape(-1,1) # 列向量

>>> b = np.arange(0,6) # 行向量

>>> a

array([[ 0],

[10],

[20],

[30],

[40],

[50]])

>>> b

array([0, 1, 2, 3, 4, 5])

>>> a[0] + b # 数组与标量的加法

array([0, 1, 2, 3, 4, 5])

>>> a[1] + b

array([10, 11, 12, 13, 14, 15])

>>> a + b # 广播

array([[ 0, 1, 2, 3, 4, 5],

[10, 11, 12, 13, 14, 15],

[20, 21, 22, 23, 24, 25],

[30, 31, 32, 33, 34, 35],

[40, 41, 42, 43, 44, 45],

[50, 51, 52, 53, 54, 55]])

>>> a * b

array([[ 0, 0, 0, 0, 0, 0],

[ 0, 10, 20, 30, 40, 50],

[ 0, 20, 40, 60, 80, 100],

[ 0, 30, 60, 90, 120, 150],

[ 0, 40, 80, 120, 160, 200],

[ 0, 50, 100, 150, 200, 250]])

十五、分段函数

>>> x = np.random.randint(0, 10, size=(1,10))

>>> x

array([[0, 4, 3, 3, 8, 4, 7, 3, 1, 7]])

>>> np.where(x<5, 0, 1) # 小于5的元素值对应0,其他对应1

array([[0, 0, 0, 0, 1, 0, 1, 0, 0, 1]])

>>> np.piecewise(x, [x<4, x>7], [lambda x:x*2, lambda x:x*3])

# 小于4的元素乘以2

# 大于7的元素乘以3

# 其他元素变为0

array([[ 0, 0, 6, 6, 24, 0, 0, 6, 2, 0]])

十六、计算唯一值以及出现次数

>>> x = np.random.randint(0, 10, 7)

>>> x

array([8, 7, 7, 5, 3, 8, 0])

>>> np.bincount(x) # 元素出现次数,0出现1次,

# 1、2没出现,3出现1次,以此类推

array([1, 0, 0, 1, 0, 1, 0, 2, 2], dtype=int64)

>>> np.sum(_) # 所有元素出现次数之和等于数组长度

7

>>> np.unique(x) # 返回唯一元素值

array([0, 3, 5, 7, 8])

十七、矩阵运算

>>> a_list = [3, 5, 7]

>>> a_mat = np.matrix(a_list) # 创建矩阵

>>> a_mat

matrix([[3, 5, 7]])

>>> a_mat.T # 矩阵转置

matrix([[3],

[5],

[7]])

>>> a_mat.shape # 矩阵形状

(1, 3)

>>> a_mat.size # 元素个数

3

>>> a_mat.mean() # 元素平均值

5.0

>>> a_mat.sum() # 所有元素之和

15

>>> a_mat.max() # 最大值

7

>>> a_mat.max(axis=1) # 横向最大值

matrix([[7]])

>>> a_mat.max(axis=0) # 纵向最大值

matrix([[3, 5, 7]])

>>> b_mat = np.matrix((1, 2, 3)) # 创建矩阵

>>> b_mat

matrix([[1, 2, 3]])

>>> a_mat * b_mat.T # 矩阵相乘

matrix([[34]])

>>> c_mat = np.matrix([[1, 5, 3], [2, 9, 6]]) # 创建二维矩阵

>>> c_mat

matrix([[1, 5, 3],

[2, 9, 6]])

>>> c_mat.argsort(axis=0) # 纵向排序后的元素序号

matrix([[0, 0, 0],

[1, 1, 1]], dtype=int64)

>>> c_mat.argsort(axis=1) # 横向排序后的元素序号

matrix([[0, 2, 1],

[0, 2, 1]], dtype=int64)

>>> d_mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

>>> d_mat.diagonal() # 矩阵对角线元素

matrix([[1, 5, 9]])

十八、矩阵不同维度上的计算

>>> x = np.matrix(np.arange(0,10).reshape(2,5)) # 二维矩阵

>>> x

matrix([[0, 1, 2, 3, 4],

[5, 6, 7, 8, 9]])

>>> x.sum() # 所有元素之和

45

>>> x.sum(axis=0) # 纵向求和

matrix([[ 5, 7, 9, 11, 13]])

>>> x.sum(axis=1) # 横向求和

matrix([[10],

[35]])

>>> x.mean() # 平均值

4.5

>>> x.mean(axis=1)

matrix([[ 2.],

[ 7.]])

>>> x.mean(axis=0)

matrix([[ 2.5, 3.5, 4.5, 5.5, 6.5]])

>>> x.max() # 所有元素最大值

9

>>> x.max(axis=0) # 纵向最大值

matrix([[5, 6, 7, 8, 9]])

>>> x.max(axis=1) # 横向最大值

matrix([[4],

[9]])

>>> weight = [0.3, 0.7] # 权重

>>> np.average(x, axis=0, weights=weight)

matrix([[ 3.5, 4.5, 5.5, 6.5, 7.5]])

>>> x = np.matrix(np.random.randint(0, 10, size=(3,3)))

>>> x

matrix([[3, 7, 4],

[5, 1, 8],

[2, 7, 0]])

>>> x.std() # 标准差

2.6851213274654606

>>> x.std(axis=1) # 横向标准差

matrix([[ 1.69967317],

[ 2.86744176],

[ 2.94392029]])

>>> x.std(axis=0) # 纵向标准差

matrix([[ 1.24721913, 2.82842712, 3.26598632]])

>>> x.var(axis=0) # 纵向方差

matrix([[ 1.55555556, 8. , 10.66666667]])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值