1.NumPy是什么
NumPy是python中的一款高性能科学计算与数据分析的基础包,NumPy定义了矩阵和数组,提供存储单一类型的多维数租(ndarray)和矩阵(Matrix)以及相关运算,功能和Matlab中的矩阵运算相似。NumPy常和稀疏矩阵计算包Scipy配合使用,更加方便。
NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
2.NumPy的使用
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。
3.创建n维数组Ndarray
(参考资料https://blog.csdn.net/u012149181/article/details/78913167)
(1)创建一个指定数组,由下可以知道arr其类型为ndaraay
import numpy as np
arr = np.array([ [1,2,3],[4,5,6] ])
print(type(arr))
print(arr)
<class 'numpy.ndarray'>
[[1 2 3]
[4 5 6]]
(2) np.random.randn()
import numpy as np
from numpy.random import randn
arr = randn(6).reshape(2,3)
print(arr)
[[ 0.20681711 2.73567805 -2.21307579]
[ 0.57554082 1.28322887 0.02147844]]
如上图生成一个个数为6,2行3列的数组,randn用来产生一组服从标准正太分布的矩阵。
- 标准正态分布—-standard normal distribution
- 标准正态分布又称为u分布,是以0为均值、以1为标准差的正态分布,记为N(0,1)。
(3) np.random.rand()
如下表示创建一个3行4列的,值在[0,1)之间的array,[0,1)表示包含0,不包含1.
import numpy as np
arr = np.random.rand(3,4)
print(arr)
[[ 0.2384065 0.79948885 0.97242851 0.06798698]
[ 0.29504884 0.27347259 0.80683931 0.13284965]
[ 0.20813522 0.70809042 0.23529395 0.81802537]]
(3)np.random.randint()
常用来产生随机整数
import numpy as np
arr = np.random.randint(2,size=5) # 返回[0,2)之间的整数,所以只有0,1
print(arr) # [0 0 0 0 1]
arr = np.random.randint(1,6) #返回一个在[1,6)中的随机整数
print(arr) # 1
arr = np.random.randint(-3,3,size=(2,3)) #产生一个值在[-3.3)之间的2行3列的数组
'''
[[-1 0 2]
[-3 -1 -1]]
'''
(4)生成[0,1)浮点数
print('-----------random_sample--------------')
print(np.random.random_sample(size=(2,2)))
print('-----------random--------------')
print(np.random.random(size=(2,2)))
print('-----------ranf--------------')
print(np.random.ranf(size=(2,2)))
print('-----------sample--------------')
print(np.random.sample(size=(2,2)))
结果为
(5) np.random.choice()
生成随机数
arr = np.random.choice(5, 3, replace=False) # 生成大小在[0,5),长度为3,且值不重复的数组
print(arr) # [2 1 4]
(6) np.random..seed()
- np.random.seed()的作用:使得随机数据可预测。
- 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数
np.random.seed(0) print(np.random.random(5)) # [ 0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 ] np.random.seed(0) print(np.random.random(5)) # [ 0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 ]
如上两个seed相同,生成的随机数相同
(7)0数组
import numpy as np
print(np.zeros(5,float)) #生成一行5列,数据类型为float的0数组
# [ 0. 0. 0. 0. 0.]
print(np.zeros([2,3])) #生成2行3列的0数组
# [[ 0. 0. 0.]
# [ 0. 0. 0.]]
(8) 1数组
print(np.ones(5,float)) #生成一行5列,数据类型为float的1数组
# [ 0. 0. 0. 0. 0.]
print(np.ones([2,3])) # 生成2行3列1数组
# [[ 1. 1. 1.]
# [ 1. 1. 1.]]
4.shape用法,获取维数的长度
arr = np.eye(4) # 生成4行4列的单位矩阵,同eye(4,4)
print(arr)
'''
[[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]]
'''
print(arr.shape) # (4, 4)
print(arr.shape[0]) # 4 获取第一维的长度
print(arr.shape[1]) # 4 获取第二维的长度
print(arr.dtype) # float64 数组中的元素类型
4 numpy与matplotlib的使用
画出标准正太分布的数据直方图
函数原型: numpy.random.normal(loc=0.0, scale=1.0, size=None)
默认均值为0,方差为1,即创建服从标准正太分布的矩阵。
import numpy as np
from matplotlib import pyplot as plt
p1 = np.random.normal(size = 10000) # 新建大小为10000的随机数
print(p1)
plt.hist(p1) # 绘制柱形图
plt.show() # 显示
结果图如下:
更多内容见如下参考资料
https://www.runoob.com/numpy/numpy-tutorial.html
https://blog.csdn.net/tugangkai/article/details/79161063