学机器学习做点小笔记,都是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较慢。但是用了矩阵乘法后,虽然效果一样,但这个速度就飞起来了。

转载于:https://www.cnblogs.com/xienaoban/p/6798065.html

[笔记]NumPy基础操作相关推荐

  1. python之numpy基础_Python知识普及:Numpy基础操作

    原标题:Python知识普及:Numpy基础操作 Numpy基础数据结构 创建数组 Numpy通用函数 import numpy as np # reshape 改变数组维度形状 ar1 = np.a ...

  2. NumPy基础操作(1)

    NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...

  3. python学习——numpy基础操作

    numpy 基础操作 1 创建数组 2 数组常用属性和函数 3 数组元素增删 4 元素查找 5 数学运算 6 数组切片 1 创建数组 import numpy as np #以后numpy简写为np ...

  4. Python笔记_34_MySQL基础操作

    文章目录 MySQL基础操作 mysql 客户端 登录 mysql 服务器 mysql 设置密码 创建账户 用户授权(创建用户的同时,也授予权限) SQl语句 配置linux my.cnf MySQL ...

  5. MongoDB学习笔记(基础操作篇)

    一.MongoDB相关概念 1.1 MongoDB相关概念 传统的关系型数据库(如MySQL),在数据操作的"三高"需求以及应对Web2.0的网站需求面前,显得力不从心. 解释:& ...

  6. [转载]numpy基础操作

    为什么要用numpy Python中提供了list容器,可以当作数组使用.但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3].就需要三个指针和三 ...

  7. 操作mysql_MySQL学习笔记之基础操作

    1. 概述 数据存储 人工管理 储存量有限,共享麻烦,操作混乱 文件管理 优点:可长期保存,存储大量数据,使用简单 缺点:  一致性差,查找不便,冗余比较大 数据库管理 优点:降低冗余度,提高增删改查 ...

  8. R语言学习笔记-RStudio基础操作

    1.快捷键 RStudio console下: Tab键:自动补齐功能 Ctrl + 上键 : 显示之前的输入代码 Alt + Shift + K :显示所有的快捷键 esc : 中断当前操作 ctr ...

  9. Python 数据分析与展示笔记1 -- Numpy 基础

    Python 数据分析与展示笔记1 – NumPy 基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考文档 ...

最新文章

  1. Sql Server之旅——第十一站 简单说说sqlserver的执行计划
  2. 表的插入、更新、删除、合并操作_3_插入新的多条记录
  3. 仓库移动_移动式仓库、检修作业平台、储油柜胶囊破裂检测装置……这场科技秀超燃!...
  4. 108. Convert Sorted Array to Binary Search Tree
  5. SAP Spartacus CMS 页面加载逻辑和性能的优化
  6. 【华为大咖分享】5.交付在云端-全云DevOps研发实践(后附PPT下载地址)
  7. c语言提取七位数讲解,输入一个七位数将这个数的奇位数重新组合成新的四位数并输出的编程怎么写    在线等急...
  8. DP 转移方程 —— 单调队列优化 斜率优化 李超树优化
  9. HeadFirstJava——8_接口与抽象类
  10. 上粱正,下粱不歪——网吧母盘制作流程(转)
  11. 西工大计算机学院软件工程专硕,念念不忘,必有回响——西北工业大学软件工程专硕...
  12. 资深java面试题及答案整理(一)
  13. 互联网最强的下载工具:IDM
  14. pascal语言基础(一)
  15. [从零开始学习FPGA编程-49]:视野篇 - 芯片是如何被设计出来的?
  16. 利用SPSS对数据转置和数据整理
  17. 双线 路由表 linux,linux双线ip设置(不需额外增加路由表)
  18. 运维知识讲解之电脑局域网服务器的密码设置和修改
  19. python判断是否有重复单词_Python判断两个单词的相似度
  20. 我在校园自动打卡autojs脚本

热门文章

  1. 转载:Linux查看设置系统时区
  2. juggle dsl语法介绍及codegen浅析
  3. JavaScript的9个陷阱及评点
  4. Vue 组件库 HeyUI@1.19.0 发布,新增 Icon 图标
  5. 数据结构之——队列与循环队列
  6. FZU 1901 Period II(KMP中的next)题解
  7. linux下OpenSSL的RSA密钥生成
  8. android 应用程序框架
  9. 2014 I/O归来:Google连接一切
  10. linux ifconfig命令配置ip地址