[笔记]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 ...
随机推荐
- 任务调用及远端管理(基于Quartz.net)
这篇文章我们来了解一些项目中的一个很重要的功能:任务调度 可能有些同学还不了解这个,其实简单点说任务调度与数据库中的Job是很相似的东西 只不过是运行的物理位置与管理方式有点不一样,从功能上来说我觉得 ...
- JavaScript对象的深浅复制
前言 从层次上来看,对象的复制可以简单地分为浅复制和深复制,顾名思义,浅复制是指只复制一层对象的属性,不会复制对象中的对象的属性,对象的深复制会复制对象中层层嵌套的对象的属性. 在复制对象时,除了要复 ...
- inux的进程-进程的概念和fork创建进程
一. 什么是进程? 初学者,可能认为程序或者一段代码就是一个进程.其实这样说是很不全面的,进程简单的说就是一个个条件. 1.需要一个代码 2.需要运行这个代码环境和资源 从下面的一段代码,我们来分析 ...
- Wpf之布局
Wpf之布局 上一章大家有了自己的一个Hello World的wpf程序,今天咱们就一起走进WPF,一起来看看wpF的前台xaml这门语言的魅力. 写过web 的人都知道布局这个概念,在web中布局和 ...
- 修改数据库用户名--CMD环境执行有效
--CMD环境执行有效 --修改数据库用户名 select * from user$ where name='aa'; update user$ set name='bb' where name ...
- PAT 1057
Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...
- 你的计算机也可以看懂世界——十分钟跑起卷积神经网络(Windows+CPU)
众所周知,如果你想研究Deep Learning,那么比较常用的配置是Linux+GPU,不过现在很多非计算机专业的同学有时也会想采用Deep Learning方法来完成一些工作,那么Linux+GP ...
- Spring实战——缓存
缓存 提到缓存,你能想到什么?一级缓存,二级缓存,web缓存,redis-- 你所能想到的各种包罗万象存在的打着缓存旗号存在的各种技术或者实现,无非都是宣扬缓存技术的优势就是快,无需反复查询等. 当然 ...
- spring boot summer快速开发框架之《一、数据库操作》
快速开发演示: 目录结构: 本例采用的mysql自带的sakila示例库,脚本DumpAddress.sql. 步骤:1. 修改application.properties中数据库连接2. 在App. ...
- 快速认识HTML及一般标签
HTML(Hype Text Language,超文本标记语言) <html >--开始标签 <head> 网页控制信息 <title>网页标题</title ...