[笔记]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 ...
随机推荐
- CentOS7 更换yum源
yum源调整为163wget http://mirrors.163.com/.help/CentOS7-Base-163.repo[root@admin yum.repos.d]# mv CentOS ...
- Android 中基于 Binder的进程间通信
摘要:对 Binder 工作机制进行了分析. 首先简述 Android 中 Binder 机制与传统的 Linux 进程间的通信比较,接着对基于 Binder 进程间通信的过程分析 最后结合开发实例 ...
- 老李分享:https协议
老李分享:https协议 最近我们看到很多站点使用 HTTPS 协议提供网页服务.通常情况下我们都是在一些包含机密信息的站点像银行看到 HTTPS 协议. 如果你访问 google,查看一下地址栏 ...
- 老李分享:jvm结构简介 1
老李分享:jvm结构简介 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...
- JAVA加密算法系列-DESCoder
package ***; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher ...
- 伸展树(Splay树)的简要操作
伸展树(splay树),是二叉排序树的一种.[两个月之前写过,今天突然想写个博客...] 伸展树和一般的二叉排序树不同的是,在每次执行完插入.查询.删除等操作后,都会自动平衡这棵树.(说是自动,也就是 ...
- Windows入门基础:1.关于CreateWindow()函数使用中遇到的问题
我在实现显示窗口的程序中,遇到一个问题:首先程序没有任何语法错误,编译能够通过,但是就是不能弹出窗口. 后来在MSDN中查询CreateWindow()函数,发现了下面这句话: "If lp ...
- qt5的.ui文件在VS2010中无法编译问题
自己手动添加的.ui文件在VS中是无法右键编译的,也即是说,在用QT designer编辑过的.ui文件无法实时更新相应的ui_XX.h文件,造成调试结果无法显示编辑过的新界面. 解决办法: 右键.u ...
- 脚本语言:Xmas(一)
很偶然的一个想法,在从北京回成都的高铁上:我想要一个计算器.于是在火车上花了十来个小时,完成了一个模型:能够处理+-*/的优先级,以及"()",比如:1+(3+2)*4.这已是一年 ...
- 使用opencv实现自定义卷积
对图像进行卷积是图像处理的基本操作,最近在研究图像滤波,经常要用到自定义卷积,所以实现了一下 #include "opencv2/imgproc/imgproc.hpp" #inc ...