[笔记]NumPy基础操作
学机器学习做点小笔记,都是Python的NumPy库的基本小操作,图书馆借的书看到的,怕自己还了书后忘了,就记下来。
一般习惯导入numpy时使用 import numpy as np ,不要直接import,会有命名空间冲突。比如numpy的array和python自带的array。
numpy下有两个可以做矩阵的东西,一个叫matrix,一个叫array。matrix指定是二维矩阵,array任意维度,所以matrix是array的分支,但是这个matrix和matlab的矩阵很像,操作也很像:
>>> import numpy as np
>>> a=np.mat('4 3; 2 1') # 使用字符串来初始化
>>> b=np.mat('1 2; 3 4')
>>> a
matrix([[4, 3],
[2, 1]])
>>> b
matrix([[1, 2],
[3, 4]])
>>> a+b # 对应位置相加
matrix([[5, 5],
[5, 5]])
>>> a*b # 矩阵乘法,与matlab相同
matrix([[13, 20],
[ 5, 8]])
>>> np.multiply(a,b) # 对应位置乘法,相当于matlab的点乘 “.*”
matrix([[4, 6],
[6, 4]])
而重点讲讲np.array。
np.array操作
首先是初始化与属性查看
>>> import numpy as np
>>> np.arange(10) # 从零生成到10-1的一维矩阵
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a=np.array([0,1,2,3,4,5]) # 因为支持多维,所以用数组来初始化
>>> a
array([0, 1, 2, 3, 4, 5])
>>> a.ndim # 查看维度
1
>>> a.shape # 查看矩阵形状尺寸
(6,)
>>> a.dtype # 查看类型
dtype('int32')
reshape改变矩阵形状,可以改变维度,但是reshape后的数据还是共享原来那一份数据
>>> b=a.reshape(3,2)
>>> b
array([[0, 1],
[2, 3],
[4, 5]])
>>> b.ndim
2
>>> b.shape
(3, 2)
>>> b[1][0]=77
>>> b
array([[ 0, 1],
[77, 3],
[ 4, 5]])
>>> a
array([ 0, 1, 77, 3, 4, 5]) # 可见b和a其实用的同一个数据
因而要产生的新矩阵不再关联,要使用copy():
>>> c=a.reshape(3,2).copy()
>>> c
array([[ 0, 1],
[77, 3],
[ 4, 5]])
>>> c[0][0]=233
>>> a
array([ 0, 1, 77, 3, 4, 5])
>>> c
array([[233, 1],
[ 77, 3],
[ 4, 5]])
array的运算:
>>> d=np.array([1,2,3,4,5]) # 一维矩阵运算
>>> d.T # 转置矩阵
array([1, 2, 3, 4, 5])
>>> d*2 # 每个数据乘以2
array([ 2, 4, 6, 8, 10])
>>> d**2 # 每个数据二次方
array([ 1, 4, 9, 16, 25])
>>> d*d # 按位置乘,与“d**2”等效,和mat正好相反
array([ 1, 4, 9, 16, 25])
>>> d.dot(d) # 矩阵乘法,和mat相反
55
>>> x=np.array([[1,2],[3,4],[5,6]]) # 二维矩阵运算
>>> y=np.array([[6,5,4],[3,2,1]])
>>> x
array([[1, 2],
[3, 4],
[5, 6]])
>>> y
array([[6, 5, 4],
[3, 2, 1]])
>>> x.dot(y) # 二维矩阵矩阵乘法
array([[12, 9, 6],
[30, 23, 16],
[48, 37, 26]])
>>> x= x.reshape(2,3)
>>> x
array([[1, 2, 3],
[4, 5, 6]])
>>> x*y # 按位置乘,要求两个矩阵shape相同
array([[ 6, 10, 12],
[12, 10, 6]])
>>> x.T # 二维矩阵的转置矩阵
array([[1, 4],
[2, 5],
[3, 6]])
>>> x.mean() # 求平均值
3.5
关于下标的运算:(这些挺有意思的)
>>> a=np.array([5,4,3,233,9])
>>> a[np.array([2,4,3])] # 列出对应下标的数值
array([ 3, 9, 233])
>>> a>4
array([ True, False, False, True, True], dtype=bool)
>>> a[a>4]
array([ 5, 233, 9])
>>> a[a>8]=8
>>> a
array([5, 4, 3, 8, 8])
>>> a.clip(4,5) # 限定所有数据范围
array([5, 4, 4, 5, 5])
还有一个关于nan的
>>> a=np.array([1,2,0,3,4])
>>> a
array([1, 2, 0, 3, 4])
>>> b=np.array([1,2,np.NAN,3,4])
>>> b
array([ 1., 2., nan, 3., 4.]) # 和a不同,虽然只改了一个nan,b每个数据后面有个“.”,说明变成float型了,说明nan其实是个float
>>> np.isnan(b)
array([False, False, True, False, False], dtype=bool)
>>> b[~np.isnan(b)]
array([ 1., 2., 3., 4.])
与系统自带array的差异
array的乘法
>>> [1,2,3,4,5]*2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> [1,2,3,4,5]**2
(报错)
运行时间
对array和np.array进行按元素平方并求和的运算,运算3000次统计时间。
>>> timeit.timeit('sum(x*x for x in range(1000))',number=3000)
0.31559807779291305
>>> timeit.timeit('sum(na*na)', setup='import numpy as np; na=np.arange(1000)',number=3000)
0.37785958035067324
>>> timeit.timeit('na.dot(na)', setup='import numpy as np; na=np.arange(1000)',number=3000)
0.0069067372806728144
惊奇的发现系统级的array求和比np.array还快,说明np.array单个数据的访问还是比array较慢。但是用了矩阵乘法后,虽然效果一样,但这个速度就飞起来了。
[笔记]NumPy基础操作的更多相关文章
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- numpy 基础操作
Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...
- 笔记-flask基础操作
笔记-flask基础操作 1. 前言 本文为flask基础学习及操作笔记,主要内容为flask基础操作及相关代码. 2. 开发环境配置 2.1. 编译环境准备 安装相关Lib ...
- NumPy基础操作
NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...
- NumPy基础操作(3)——代数运算和随机数
NumPy基础操作(3)--代数运算和随机数 (注:记得在文件开头导入import numpy as np) 目录: NumPy在矩阵运算中的应用 常用矩阵运算函数介绍 编程实现 利用NumPy生成随 ...
- NumPy基础操作(2)
NumPy基础操作(2) (注:记得在文件开头导入import numpy as np) 目录: 写在前面 转置和轴对换 NumPy常用函数 写在前面 本篇博文主要讲解了普通转置array.T.轴对换 ...
- C#基础随手笔记之基础操作优化
对数据的查询,删除等基本操作是任何编程语言都会涉及到的基础,因此,研究了一下C#中比较常用的数据操作类型,并顺手做个笔记. List查询时,若是处理比较大的数据则使用HashSet<T>类 ...
- [SQL] SQL学习笔记之基础操作
1 SQL介绍 SQL 是用于访问和处理数据库的标准的计算机语言.关于SQL的具体介绍,我们通过回答如下三个问题来进行. SQL 是什么? SQL,指结构化查询语言,全称是 Structured Qu ...
- 学习Numpy基础操作
# coding:utf-8 import numpy as np from numpy.linalg import * def day1(): ''' ndarray :return: ''' ls ...
随机推荐
- 用async 解放你的大脑
在js中,代码嵌套和代码回调非常常见,不仅编写麻烦而且异常反人类.让我等码农很是头痛 function () { function () { function () { ...
- 【已解决】Windows下 MySQL大小写敏感 解决方案及分析
Windows下 MySQL大小写敏感配置 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-3-27 最近在window ...
- ZooKeeper集群-搭建指南
第一步: 上传安装程序到Linux 这一步很简单就不在这过多说明了! 第二步: 在Linux上使用命令行安装 第三步: 修改配置文件 1.修改zoo.cfg文件 2.修改集群中各台主机的名称 1).如 ...
- Maven项目搭建(二):Maven搭建SSM框架
上一章给大家讲解了如何使用Maven搭建web项目. 这次给大家介绍一下怎么使用Maven搭建SSM框架项目. 首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. p ...
- iframe 自适应内容高度
在使用iframe的时候,会出现iframe不能随着内容的高度自动改变的情况,下面就介绍一种可以自适应高度的办法.<br/> <pre> <iframe id=" ...
- SVN使用小记
SVN(Subversion)是优秀的版本控制工具,之前在eclipse里面项目管理的时候,File-->Import-->SVN-->从SVN检出项目-->创建新的资源库位置 ...
- jPaginate 一个非常好用的分页插件
之前报馆项目用的前端框架easyui,还是用不太习惯,因此换了一个框架,最近为此找分页插件,偶然间看见一个非常好用的分页插件JPaginate Paginate是基于jquery的分页插件,非常轻量, ...
- 异步编程的两种模型,闭包回调,和Lua的coroutine,到底哪一种消耗更大
今天和人讨论了一下CPS变形为闭包回调(典型为C#和JS),以及Lua这种具有真正堆栈,可以yield和resume的coroutine,两种以同步的形式写异步处理逻辑的解决方案的优缺点.之后生出疑问 ...
- poptest老李谈分布式与集群 2
集群分类 Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群) 高可用集群( High Availability Cluster)负载均衡集群(Load Balance Clus ...
- iOS 给UITextView加一个placeholder
苹果并没有为UITextView提供placeholder功能.我们可以通过两种办法实现. 方法一: 思路:设置默认显示的文字,颜色设置为灰色.代理方法监听textView点击. 缺点:如果点击到文字 ...