Numpy基础笔记
Numpy简介
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:
①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
④线性代数、随机数生成以及傅里叶变换功能。
⑤用于集成由C、C++、Fortran等语言编写的代码的工具。
创建数组
创建数组最简单的办法是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:
- data1=[6,7.5,8,0,1] #创建列表
- arr1=np.array(data1) #转换为数组
- arr1.dtype #数据类型保存在dtype对象中
- data2=[[1,2,3,4],[5,6,7,8]] #创建嵌套序列(由等长列表组成的列表)
- arr2=np.array(data2) #转换为多维数组
- np.zeros(10) #创建指定长度(10)的全0数组
- np.ones((3,6)) #创建指定长度的(3行6列二维)的全1数组
- range(10) #创建指定数量的顺序列表(内置函数,默认0开始)
- arange(10) #创建指定数量的顺序数组
- eye(10) #创建一个正方的N×N单位矩阵
- arr1=np.array([1,2,3],dtype=np.float64) #解释为特定数据类型
数组和标量之间的运算
- arr=np.array([[1.,2.,3.],[4.,5.,6.]]) #创建二维数组
- arr*arr #行列号相同的数组元素间运算
- arr-arr
- 1/arr
- arr*0.5
基本的索引与切片
- arr=np.arange(10)
- arr[5] #索引第6个元素
- arr[5:8] #索引第6到第9个元素作为数组
- arr[5:8]=12 #令第6到第9个元素等于12
- arr_slice=arr[5:8] #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组
- arr_slice[:]=64 #将数组切片的全部元素改为64
- arr[5:8].copy() #得到数组切片的一份副本
- arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
- arr2d[2] #索引二维数组第3行
- arr2d[0][2] arr2d[0,2] #等价索引1行3列元素
- arr2d[:2] #索引第1行和第2行(不含第3行)
- arr2d[:,:1] #索引第1列
- arr2d[:-2] #使用负数索引将从尾部开始选取行
数组转置和轴对换
转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行复制操作)。
- arr=np.arange(15).reshape((3,5)) #生成顺序数组,后整形为3行5列
- arr.T #转置
- arr=np.random.randn(6,3) #randn函数生成一些正态分布的随机数组(6行3列)
- np.dot(arr.T,arr) #利用np.dot计算矩阵内积XTX
通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。
- arr=np.arange(10)
- np.sqrt(arr) #计算各元素的平方根(arr**0.5)
- exp #计算各元素指数ex; abs #绝对值;
- np.add(x,y) #x、y数组中对应元素相加; subtract #相减; multiply #相乘; divide #相除;
利用数组进行数据处理
用数组表达式代替循环的做法,通常称为矢量化
将条件逻辑表述为数组运算
Numpy.where函数是三元表达式x if condition else y的矢量化版本
- xarr=np.array([1.1,1.2,1.3,1.4,1.5]) #两个数值数组
- yarr=np.array([2.1,2.2,2.3,2.4,2.5])
- cond=np.array([True,False,True,True,False]) #一个布尔数组
- result=np.where(cond,xarr,yarr) #三元表达式
数学和统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。Sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用:
- arr=np.random.randn(5,4)
- arr.mean(); np.mean(arr); arr.sum();
- arr.mean(axis=1) #计算该轴上的统计值(0为列,1为行)
用于布尔型数组的方法
布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
- arr=randn(100)
- (arr>0).sum() #正值的数量
- bools.any() #用于测试数组中是否存在一个或多个True
- bools.all() #用于测试数组中所有值是否都是True
排序
跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序(修改数组本身)。
- arr=randn(8)
- arr.sort()
- arr=randn(5,3)
- arr.sort(0) #二维数组按列排序; arr.sort(1) #二维数组按行排序;
唯一化
- ints=np.array([3,3,3,2,2,1,1,4,4])
- np.unique(names) #找出数组中的唯一值并返回已排序的结果
用于数组的文件输入输出
Numpy能够读写磁盘上的文本数据或二进制数据。
- arr=np.arange(10)
- np.save(‘some_array’,arr) #数组以未压缩的原始二进制格式保存在.npy文件中
- np.load(‘some_array’) #通过np.load读取磁盘上的数组
- np.savez(‘array_archive.npz’,a=arr,b=arr) #将多个数组以保存在一个压缩文件中
- a=np.arange(0,12,0.5).reshape(4,-1)
- np.savetxt(‘E:\\knakan\\a.txt’,a) #缺省按照’%.18e’格式保存数据,以空格分隔
- np.loadtxt(‘E:\\kankan\\a.txt’)
- np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”) #改为保存为整数,以逗号分隔
- np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”) #读入时也需指定逗号分隔
线性代数
- x=np.array([[1.,2.,3.],[4.,5.,6.]])
- y=np.array([[6.,23.],[-1,7],[8,9]])
- x.dot(y) #矩阵乘法,相当于np.dot(x,y)
【参考文献】
[1]. 利用Python进行数据分析,wes McKinney著,唐学韬译,2014年,机械工业出版社
Numpy基础笔记的更多相关文章
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...
- python学习笔记(三):numpy基础
Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...
- 【学习笔记】 第04章 NumPy基础:数组和矢量计算
前言 正式开始学习Numpy,参考用书是<用Python进行数据清洗>,计划本周五之前把本书读完,关键代码全部实现一遍 NumPy基础:数组和矢量计算 按照书中所示,要搞明白具体的性能差距 ...
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- NumPy学习笔记 一
NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Numpy学习笔记(上篇)
目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
随机推荐
- DevExpress 控件 GridControl常见用法
刚接触DevExpress第三方控件,把GridControl的常见用法整理一下,以供参考: 说明: gcTest GridControl gvText GridView //隐藏最上面的G ...
- PPT五大插件汇总下载
收集总结一下PPT制作中常用到的插件/应用,希望能帮到大家. 1.Nordri Tools NT插件是由Nordri公司开发的PPT插件,功能强大,简单易上手,设计偷懒必备神器.我们可以看看它有哪些功 ...
- PHP面向对象之旅:抽象类继承抽象类(转)
可以理解为对抽象类的扩展 抽象类继承另外一个抽象类时,不用重写其中的抽象方法.抽象类中,不能重写抽象父类的抽象方法.这样的用法,可以理解为对抽象类的扩展. 下面的例子,演示了一个抽象类继承自另外一个抽 ...
- 在LINUX中跟踪函数调用----http://stackoverflow.com/
http://stackoverflow.com/questions/311840/tool-to-trace-local-function-calls-in-linux I am looking f ...
- iOS UIKit:App
1.App生命周期 IOS架构是由许多设计模式实现,如model-view-controller 和 delegation模式. 1.1 main函数 与其它框架类似,IOS框架的入口也是从main函 ...
- Ant配置
首先去官网下载一个ant的文件 http://ant.apache.org/bindownload.cgi
- iBatis 的简单入门
iBATIS一词来源于“internet”和“abatis”的组合,于2010年6月16号被谷歌托管,改名为MyBatis.是一个基于SQL映射支持Java和·NET的持久层框架. ibatis本是a ...
- 如何在获取Datarow对象在其所属DataTable中的Index
做项目的时候需要先select一个DataTable的子集,后来又需要子集中这些DataRow的Index, 这个需求本来就有些奇怪,网上也没搜到.刚开始走了很多弯路,后来发现一个简便方法 'dr是你 ...
- EntityFramework 中生成的类加注释
EF5在生成实体类时获取不到数据库中表的说明字段,需要使用单独的t4模板来获取 下载文件 将文件与edmx 放同一文件夹 1.在生成类的t4模板中加入 <#@ include file=&quo ...
- org.springframework.beans.factory.BeanCreationException: 求教育!
2014-11-26 14:05:56 [org.springframework.web.context.support.XmlWebApplicationContext]-[WARN] Except ...