Python---Numpy科学计算库的使用
来源:互联网 发布:mac磁盘工具可清除 编辑:程序博客网 时间:2024/05/22 04:46
一、简介
NumPy是一个开源的Python科学计算基础库,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合C/C++/Fortran代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
NumPy的引用:
import numpy as np
二、N维数组对象:ndarray
ndarray是一个多维数组对象,由两部分构成:
- 实际的数据
- 描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始
2.1 ndarray对象的属性
例如:
>>> a=np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])>>> a.ndim2>>> a.shape(3, 4)>>> a.size12>>> a.dtypedtype('int64')>>> a.itemsize8
2.2 ndarry的元素类型
2.3 ndarray数组的创建方法
2.3.1 从Python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple)x = np.array(list/tuple, dtype=np.float32)//当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型
例如:
>>> a=np.array([0,1,2,3])>>> aarray([0, 1, 2, 3])>>> a=np.array([0,1,2,3],dtype=np.float32)>>> aarray([ 0., 1., 2., 3.], dtype=float32)>>> print(a)[ 0. 1. 2. 3.]
2.3.2 使用NumPy中函数创建ndarray数组
例如:
>>> np.arange(9)array([0, 1, 2, 3, 4, 5, 6, 7, 8])>>> np.ones(9)array([ 1., 1., 1., 1., 1., 1., 1., 1., 1.])>>> np.ones((9),dtype=np.int32)array([1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)>>> np.zeros((2,3))array([[ 0., 0., 0.], [ 0., 0., 0.]])>>> np.full(9,100)array([100, 100, 100, 100, 100, 100, 100, 100, 100])>>> np.eye(5)array([[ 1., 0., 0., 0., 0.], [ 0., 1., 0., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 0., 1., 0.], [ 0., 0., 0., 0., 1.]])>>> x=np.eye(5)>>> np.full_like(x,8.88)array([[ 8.88, 8.88, 8.88, 8.88, 8.88], [ 8.88, 8.88, 8.88, 8.88, 8.88], [ 8.88, 8.88, 8.88, 8.88, 8.88], [ 8.88, 8.88, 8.88, 8.88, 8.88], [ 8.88, 8.88, 8.88, 8.88, 8.88]])>>> a=np.linspace(1,9,4,dtype=np.int32)>>> print(a)[1 3 6 9]>>> b=np.linspace(1,9,4,endpoint=False,dtype=np.int32)>>> print(b)[1 3 5 7]>>> c=np.concatenate((a,b))>>> print(c)[1 3 6 9 1 3 5 7]
2.4 ndarray数组的变换
例如:
>>> a=np.arange(24)>>> print(a)[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]>>> a.reshape((4,6))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]])>>> aarray([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])>>> a.resize((4,6))>>> aarray([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]])>>> a.swapaxes(0,1)array([[ 0, 6, 12, 18], [ 1, 7, 13, 19], [ 2, 8, 14, 20], [ 3, 9, 15, 21], [ 4, 10, 16, 22], [ 5, 11, 17, 23]])>>> a.flatten()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])>>> a.astype(np.float)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.]])>>> a.tolist()[[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]
三、ndarray数组的操作
3.1 数组的索引和切片
3.1.1 索引
直接索引,每个维度一个索引值
>>> a=np.arange(9)>>> a[3]3>>> a[1:8:3]array([1, 4, 7])//a[起始编号:终止编号:步长]>>> a.resize((3,3))>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])>>> a[1,1]4
3.1.2 切片
切片:获取数组元素子集的过程
>>> a=np.arange(24).reshape((2,3,4))>>> aarray([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])>>> a[:,0,-2]array([ 2, 14])>>> a[:,0:2,:]array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[12, 13, 14, 15], [16, 17, 18, 19]]])>>> a[:,:,::3]array([[[ 0, 3], [ 4, 7], [ 8, 11]], [[12, 15], [16, 19], [20, 23]]])
3.2 数组的运算
数组与标量之间的运算作用于数组的每一个元素
>>> a=np.arange(24).reshape((2,3,4))>>> aarray([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])>>> a+1array([[[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]], [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]])>>> a=a*2>>> aarray([[[ 0, 2, 4, 6], [ 8, 10, 12, 14], [16, 18, 20, 22]], [[24, 26, 28, 30], [32, 34, 36, 38], [40, 42, 44, 46]]])
3.2.1 NumPy一元函数
3.2.2 NumPy二元函数
- ‐ * / **
< >= <= == !=算术比较,产生布尔型数组
>>> a=np.arange(24).reshape((2,3,4))>>> b=np.sqrt(a)>>> aarray([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])>>> barray([[[ 0. , 1. , 1.41421356, 1.73205081], [ 2. , 2.23606798, 2.44948974, 2.64575131], [ 2.82842712, 3. , 3.16227766, 3.31662479]], [[ 3.46410162, 3.60555128, 3.74165739, 3.87298335], [ 4. , 4.12310563, 4.24264069, 4.35889894], [ 4.47213595, 4.58257569, 4.69041576, 4.79583152]]])>>> np.minimum(a,b)array([[[ 0. , 1. , 1.41421356, 1.73205081], [ 2. , 2.23606798, 2.44948974, 2.64575131], [ 2.82842712, 3. , 3.16227766, 3.31662479]], [[ 3.46410162, 3.60555128, 3.74165739, 3.87298335], [ 4. , 4.12310563, 4.24264069, 4.35889894], [ 4.47213595, 4.58257569, 4.69041576, 4.79583152]]])>>> a>barray([[[False, False, True, True], [ True, True, True, True], [ True, True, True, True]], [[ True, True, True, True], [ True, True, True, True], [ True, True, True, True]]], dtype=bool)
四、NumPy的函数
4.1 NumPy的随机函数
NumPy的random子库
np.random.*
>>> np.random.rand(2,3)array([[ 0.71434594, 0.57272119, 0.47711135], [ 0.80828704, 0.06779339, 0.36447176]])>>> np.random.randn(2,3)array([[ 0.31938179, -1.34453592, -1.35738183], [-1.93856717, 1.15491882, 0.24352126]])>>> a=np.random.randint(90,100,(3,4))>>> aarray([[96, 97, 96, 90], [97, 90, 99, 98], [92, 97, 91, 98]])>>> np.random.shuffle(a)>>> aarray([[96, 97, 96, 90], [97, 90, 99, 98], [92, 97, 91, 98]])>>> np.random.shuffle(a)>>> aarray([[96, 97, 96, 90], [92, 97, 91, 98], [97, 90, 99, 98]])
4.2 NumPy的统计函数
>>> a=np.arange(24).reshape(3,8)>>> aarray([[ 0, 1, 2, 3, 4, 5, 6, 7], [ 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22, 23]])>>> np.min(a)0>>> np.argmax(a)23>>> np.ptp(a)23>>> np.median(a)11.5
4.3 NumPy的梯度函数
np.gradient(f):计算数组f中元素的梯度,当f为多维时,返回每个维度梯度
梯度:连续值之间的变化率,即斜率
>>> a=np.random.randint(0,20,(5))>>> aarray([10, 2, 4, 15, 3])>>> np.gradient(a)array([ -8. , -3. , 6.5, -0.5, -12. ])// -8=(2-10)/1// -3=(4-10)/2
五、数据存取
5.1 CSV文件存取
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
- frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
- array : 存入文件的数组
- fmt : 写入文件的格式,例如:%d %.2f %.18e
- delimiter : 分割字符串,默认是任何空格
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
- frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
- dtype : 数据类型,可选
- delimiter : 分割字符串,默认是任何空格
- unpack : 如果True,读入属性将分别写入不同变量
>>> a=np.arange(100).reshape(5,20)>>> np.savetxt('a.scv',a,fmt='%d',delimiter=',')>>> b=np.loadtxt('a.scv',dtype=np.int,delimiter=',')>>> barray([[ 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, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79], [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
CSV只能有效存储一维和二维数组
np.savetxt() np.loadtxt()只能有效存取一维和二维数组
5.2 多维数据存取
a.tofile(frame, sep='', format='%s')
- frame : 文件、字符串
- sep : 数据分割字符串,如果是空串,写入文件为二进制
- format : 写入数据的格式
np.fromfile(frame, dtype=float, count=‐1, sep='')
- frame : 文件、字符串
- dtype : 读取的数据类型
- count : 读入元素个数,‐1表示读入整个文件
- sep : 数据分割字符串,如果是空串,写入文件为二进制
>>> a=np.arange(100).reshape(5,4,5)>>> a.tofile("b.dat",sep=",",format="%d")>>> b=np.fromfile("b.dat",sep=",")>>> barray([ 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., 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43., 44., 45., 46., 47., 48., 49., 50., 51., 52., 53., 54., 55., 56., 57., 58., 59., 60., 61., 62., 63., 64., 65., 66., 67., 68., 69., 70., 71., 72., 73., 74., 75., 76., 77., 78., 79., 80., 81., 82., 83., 84., 85., 86., 87., 88., 89., 90., 91., 92., 93., 94., 95., 96., 97., 98., 99.])
5.3 NumPy的便捷存取
np.save(fname, array) np.savez(fname, array)
- fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
- array : 数组变量
np.load(fname)
- fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
>>> a=np.arange(10)>>> np.save("a.npy",a)>>> b=np.load("a.npy")>>> barray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
阅读全文
0 0
- Python科学计算库Numpy的使用
- python科学计算库numpy的使用
- Python---Numpy科学计算库的使用
- Python科学计算库-Numpy的使用基础
- Python科学计算库NumPy
- python科学计算包numpy使用心得
- python科学计算numpy
- python科学计算:numpy
- Python 科学计算 -- Numpy
- python 科学计算Numpy的自学(一)
- python 科学计算库 - Numpy,Scipy,Pandas
- Python科学计算库NumPy基础操作
- python科学计算之Numpy
- Python科学计算之NumPy
- Python科学计算包NumPy
- python科学计算值numpy
- Python 进行科学计算:NumPy
- Python画图库 matplotlib, 数值计算库 numpy, 科学计算库 scipy 的安装
- shell学习二十二--case语句
- LAMP环境搭建系列之六:Nginx运行php-fpm
- Discussions in User Experience.pdf 英文原版 免费下载
- hdu_2005 第几天
- 配置hadoop和jdk(java)环境
- Python---Numpy科学计算库的使用
- 大数据管理+数据集成的技术、方法与最佳实践.pdf 免费下载
- BigDecimal和BigInteger类基础笔记
- Node中exports和module.exports的区别
- PHP 7 Zend Certification Study Guide.pdf 英文原版 免费下载
- 安卓按键的正则
- NPU17届程序设计 1571 八数码问题 暴力BFS
- matlab排队论仿真
- 7.1这个程序我真不会