Python科学计算库--Numpy

一、基础概念

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。


二、创建数组

import numpy as np

#利用arange创建数组
a1 = np.arange(12) #默认从0开始,直到12(但不包括12),步长为1
print(a1) #打印 [ 0  1  2  3  4  5  6  7  8  9 10 11]
a2 = np.arange(3,12) #从3开始,直到12(但不包括12),步长为1
print(a2) #打印 [ 3  4  5  6  7  8  9 10 11]
a3 = np.arange(3,12,2) #从3开始,直到12(但不包括12),步长为2
print(a3) #打印 [ 3  5  7  9 11]
a4 = np.arange(6,12,0.5) #从6开始,直到12(但不包括12),步长为0.5
print(a4) #打印 [ 6.   6.5  7.   7.5  8.   8.5  9.   9.5 10.  10.5 11.  11.5]

#重定义数组形状
a5 = a1.reshape(3,4) #将数组定义为三行四列
print(a5.shape) #打印 (3,4)
print(a5)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
'''

#计算数组元素个数
print(a5.size) #打印 12

#查看数组元素类型
print(a4.dtype) #打印 float64
print(a5.dtype) #打印 int32
import numpy as np

#利用list创建数组
a1 = np.array([1,2,3,4,5,6]) #使用整数列表
print(a1) #打印[1 2 3 4 5 6]
a2 = np.array([1.2,2.4,3.6]) #使用小数列表
print(a2) #打印[1.2 2.4 3.6]

list = [x for x in range(1,13)]
print(list) #打印 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

a3 = np.array(list)
print(a3) #打印 [ 1  2  3  4  5  6  7  8  9 10 11 12]

#数据类型
print(type(a3)) #打印 <class 'numpy.ndarray'>

#创建二维数组
a4 = np.array([(1,2,3,4),(5,6,7,8)]) #使用元组创建
a5 = np.array([[1.1,2.2],[3.3,4.4]]) #使用小数创建

#指定元素类型
a6 = np.array([1,2,3,4,5,6],dtype=complex)
print(a6) #打印 [1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]

a7 = np.array([1,2,3,4,5,6],dtype=np.float32)
print(a7) #打印 [1. 2. 3. 4. 5. 6.]

a8 = np.array([1,0,0,1,1,0,1],dtype=bool)
print(a8) #打印 [ True False False  True  True False  True]
import numpy as np

#使用linspace创建数组
a1 = np.linspace(0,10,5) #首位是0,末位是10,含有5个数的等差数列
print(a1) #打印 [ 0.   2.5  5.   7.5 10. ]
a2 = np.linspace(10,50,5) #首位是10,末位是50,含有5个数的等差数列
print(a2) #打印 [10. 20. 30. 40. 50.]

#使用ones创建矩阵
a3 = np.ones((3,4)) #创建3*4的全1矩阵
print(a3)
'''
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
'''

#使用zeros创建矩阵
a4 = np.zeros((3,4)) #创建3*4的全0矩阵
print(a4)
'''
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
'''

#使用eye创建N阶单位矩阵
a5 = np.eye(4)
print(a5)
'''
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
'''

#使用empty创建矩阵
a6 = np.empty((2,3)) #创建2*3随意无用数字占位的矩阵
print(a6)
'''
[[8.09759659e-312 8.09761242e-312 8.09769921e-312]
 [1.95818994e-306 6.23036978e-307 1.86919785e-306]]
'''

#使用random创建矩阵
a7 = np.random.random((2,3)) #创建2*3随机数占位的矩阵
print(a7)
'''
[[0.85418275 0.45365831 0.96878586]
 [0.94365989 0.13162742 0.16894064]]
'''

#将二维矩阵拉成一维矩阵
a8 = a7.ravel()
print(a8) #打印 [0.85418275 0.45365831 0.96878586 0.94365989 0.13162742 0.16894064]

三、矩阵运算

import numpy as np

#矩阵运算
a1 = np.arange(1,7).reshape(2,3)
a2 = np.ones((2,3),dtype=np.int)

print(a1)
'''
[[1 2 3]
 [4 5 6]]
'''
print(a2)
'''
[[1 1 1]
 [1 1 1]]
'''

#矩阵相加
print(a1+a2)
'''
[[2 3 4]
 [5 6 7]]
'''

#矩阵相减
print(a1-a2)
'''
[[0 1 2]
 [3 4 5]]
'''

#矩阵相乘
print(a1*a2)
'''
[[1 2 3]
 [4 5 6]]
'''

#矩阵相除
print(a2/a1)
'''
[[1.         0.5        0.33333333]
 [0.25       0.2        0.16666667]]
'''

#矩阵乘方
print(a1**2)
'''
[[ 1  4  9]
 [16 25 36]]
'''

'''
以上运算都是矩阵中对应元素的计算
下面介绍矩阵乘法,是两个矩阵之间的乘法,要求第一个矩阵的列要等于第二个矩阵的行
'''

#矩阵转置
a3 = a2.transpose()
print(a3)
'''
[[1 1]
 [1 1]
 [1 1]]
'''

a4 = a2.T
print(a4)
'''
[[1 1]
 [1 1]
 [1 1]]
'''

#矩阵点乘
print(a1.dot(a3))
'''
[[ 6  6]
 [15 15]]
'''

'''
矩阵的逆:对于矩阵A,若存在AB=E,则矩阵B为矩阵A的逆
'''

#矩阵的逆
a5 = np.eye(3,3)
print(lg.inv(a5)) #单位矩阵的逆是自己本身
'''
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
'''
import numpy as np

#矩阵的其他计算
a = np.arange(1,13).reshape(3,4)
print(a)
'''
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
'''

#每行求和()
print(np.sum(a,axis=1)) #打印 [10 26 42]

#每列求和()
print(np.sum(a,axis=0)) #打印 [15 18 21 24]

'''
容易看出,行求和与列求和相差的只有axis的取值
在numpy中,所有涉及行列相关的,axis=0都是计算各列,axis=1都是计算各行
下面的各个运算都遵循这个规则,故演示时只演示其一
'''

#矩阵最小值
print(np.min(a)) #矩阵最小值,打印 1
print(np.min(a,axis=1)) #各行最小值,打印 [1 5 9]
print(np.argmin(a)) #最小值的下标,此处打印 0

#矩阵最大值
print(np.max(a)) #矩阵最大值,打印 12
print(np.max(a,axis=0)) #各列最大值 打印 [ 9 10 11 12]
print(np.argmax(a)) #最大值的下标,此处打印 11

#矩阵平均值
print(np.mean(a)) #矩阵平均值,打印 6.5
print(np.mean(a,axis=1)) #各行平均值,打印 [ 2.5  6.5 10.5]

#矩阵方差
print(np.var(a)) #矩阵方差,打印 11.916666666666666
print(np.var(a,axis=1)) #各行方差,打印 [1.25 1.25 1.25]

#矩阵标准差
print(np.std(a)) #矩阵标准差,打印 3.452052529534663
print(np.std(a,axis=1)) #各行标准差,打印 [1.11803399 1.11803399 1.11803399]

四、矩阵切片

import numpy as np

a = np.arange(1,13).reshape(3,4)
print(a)
'''
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
'''

#截取第2行
print(a[1,:]) #打印 [5 6 7 8]

'''
numpy可以通过a[x,y]访问一个元素,也可以用a:b表示[a,b]的区间(左闭右开),单个':'则表示从头到尾
所以a[1,:]就表示,访问的行是第二行(行标从0开始),访问的列是':',即列标从0开始直到末尾,故选择的是第二行所有元素
如下,将':'改为'2:4'的话,就表示列号从2开始直到4(左闭右开),即第三列和第四列
'''

#截取第2行的第3、4列
print(a[1,2:4]) #打印 [7 8]

#截取前两行
print(a[:2]) #解释:a[:2]没有',',故表示只选行号,而[:2]表示前两行
'''
[[1 2 3 4]
 [5 6 7 8]]
'''

#截取第3列
print(a[:,2]) #打印 [ 3  7 11]

'''
numpy可以通过a[x,y]访问一个元素,也可以用a:b表示[a,b]的区间(左闭右开),单个':'则表示从头到尾
所以a[:,2]就表示,访问的列是第三列(2在逗号之后),访问的行是':',即行标从0开始直到末尾,故选择的是第三列所有元素
'''

#截取第3、4列
print(a[:,2:4])
'''
[[ 3  4]
 [ 7  8]
 [11 12]]
'''

#按条件截取
b = a[a>6]
print(b) #打印 [ 7  8  9 10 11 12]

#按条件修改矩阵
a[a<6] = 0
print(a)
'''
[[ 0  0  0  0]
 [ 0  6  7  8]
 [ 9 10 11 12]]
'''

五、矩阵连接

import numpy as np

a = np.arange(1,7).reshape(2,3)
b = np.arange(101,107).reshape(2,3)

print(a)
'''
[[1 2 3]
 [4 5 6]]
'''
print(b)
'''
[[101 102 103]
 [104 105 106]]
'''

'''
行连接,即行不变,列增加
实际项目中表现为数据记录(一行记作一个记录)数目不变,但是记录的属性增加了
'''
c = np.concatenate((a,b),axis=1)
print(c)
'''
[[  1   2   3 101 102 103]
 [  4   5   6 104 105 106]]
'''

'''
列连接,即列不变,行增加
实际项目中表现为数据属性不变,但是数据记录增加了
'''
d = np.concatenate((a,b),axis=0)
print(d)
'''
[[  1   2   3]
 [  4   5   6]
 [101 102 103]
 [104 105 106]]
'''
Python的设计哲学是“优雅”、“明确”、“简单。Python用途极广。图形处理:有PIL、Tkinter等图形支持,能方便进行图形处理。 数学处理:NumPy扩展提供大量与许多标准数学的接口。 文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。 数据编程:程序员可通过遵循Python DB-API(数据应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。 网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。 Web编程:应用的开发语言,支持最新的XML技术。 多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。 pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。 黑客编程:python有一个hack的,内置了你熟悉的或不熟悉的函数,但是缺少成就感。 用Python写简单爬虫
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值