学机器学习做点小笔记,都是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基础操作的更多相关文章

  1. [学习笔记] Numpy基础 系统学习

    [学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...

  2. numpy 基础操作

    Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...

  3. 笔记-flask基础操作

    笔记-flask基础操作 1.      前言 本文为flask基础学习及操作笔记,主要内容为flask基础操作及相关代码. 2.      开发环境配置 2.1.    编译环境准备 安装相关Lib ...

  4. NumPy基础操作

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

  5. NumPy基础操作(3)——代数运算和随机数

    NumPy基础操作(3)--代数运算和随机数 (注:记得在文件开头导入import numpy as np) 目录: NumPy在矩阵运算中的应用 常用矩阵运算函数介绍 编程实现 利用NumPy生成随 ...

  6. NumPy基础操作(2)

    NumPy基础操作(2) (注:记得在文件开头导入import numpy as np) 目录: 写在前面 转置和轴对换 NumPy常用函数 写在前面 本篇博文主要讲解了普通转置array.T.轴对换 ...

  7. C#基础随手笔记之基础操作优化

    对数据的查询,删除等基本操作是任何编程语言都会涉及到的基础,因此,研究了一下C#中比较常用的数据操作类型,并顺手做个笔记. List查询时,若是处理比较大的数据则使用HashSet<T>类 ...

  8. [SQL] SQL学习笔记之基础操作

    1 SQL介绍 SQL 是用于访问和处理数据库的标准的计算机语言.关于SQL的具体介绍,我们通过回答如下三个问题来进行. SQL 是什么? SQL,指结构化查询语言,全称是 Structured Qu ...

  9. 学习Numpy基础操作

    # coding:utf-8 import numpy as np from numpy.linalg import * def day1(): ''' ndarray :return: ''' ls ...

随机推荐

  1. 使用moment.js轻松管理日期和时间

    大家在前端Javascript开发中会遇到处理日期时间的问题,经常会拿来一大堆处理函数才能完成一个简单的日期时间显示效果.今天我给大家介绍一个轻量级的Javascript日期处理类库:moment.j ...

  2. 如何用Android Studio查看build.gradle源码

    上一篇博客里讲过 build.gradle 里的每一行代码基本都是在调用一个方法,既然是这样,我们就可以用 android studio(下面简称as) 去查看它源码的方法注释说明,这样就可以理解每个 ...

  3. Spring MVC ajax:post/get 的具体实现

    Post 方式 1.自动注入 a. pom.xml ---- 配置Maven,添加必要的jar包 <!--用于 String-JSONObject 转换 --> <dependenc ...

  4. Oracle子查询中any、some、all之间的区别

    用some,any和all对子查询中返回的多行结果进行处理. 下面我们来简单介一下这几个关键词的含义. * Some在此表示满足其中一个的意义,是用or串起来的比较从句. * Any也表示满足其中一个 ...

  5. (iOS)关于@property和@synthesize的理解(原创)

    开始学习ios的时候,就对一些objc的语法不理解,就比如@property和@synthesize,之前都是记住然后照着用,但是写的代码多了,对objc和ios有了一些理解,再加上最近用MRC,所以 ...

  6. MyEclipse常见错误

    1.Could not create the view: An unexpected exception was thrown java.lang.NullPointerException     a ...

  7. centos7.2部署最新ELK 5.3

    ## 安装elasticsearch服务> 安装jdk 1.8 ```rpm -ivh jdk-8u101-linux-x64.rpmjava -version``` > 配置rpm `` ...

  8. 跟着刚哥梳理java知识点——变量之间的类型转换(四)

    变量之间的类型转换主要包括自动类型转换和强制类型转换. 1.自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动的转换成容量大的类型. [知识点]: a)char,byte,sh ...

  9. Ranking Relevance小结

    Ranking Relevance是搜索排序算法的各个影响因子中相当重要的一个部分.对于Ranking Relevance的计算,过去的技术往往分为两个大的方向:Click Behavior和Text ...

  10. 读书笔记 effective c++ Item 49 理解new-handler的行为

    1. new-handler介绍 当操作符new不能满足内存分配请求的时候,它就会抛出异常.很久之前,它会返回一个null指针,一些旧的编译器仍然会这么做.你仍然会看到这种旧行为,但是我会把关于它的讨 ...