Numpy简介

Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:

①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
    ②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
    ③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
    ④线性代数、随机数生成以及傅里叶变换功能。

⑤用于集成由C、C++、Fortran等语言编写的代码的工具。

创建数组

创建数组最简单的办法是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:

  1. data1=[6,7.5,8,0,1]    #创建列表
  2. arr1=np.array(data1)    #转换为数组
  3. arr1.dtype    #数据类型保存在dtype对象中
  4. data2=[[1,2,3,4],[5,6,7,8]]    #创建嵌套序列(由等长列表组成的列表)
  5. arr2=np.array(data2)    #转换为多维数组
  6. np.zeros(10)    #创建指定长度(10)的全0数组
  7. np.ones((3,6))    #创建指定长度的(3行6列二维)的全1数组
  8. range(10)    #创建指定数量的顺序列表(内置函数,默认0开始)
  9. arange(10)    #创建指定数量的顺序数组
  10. eye(10)    #创建一个正方的N×N单位矩阵
  11. arr1=np.array([1,2,3],dtype=np.float64)    #解释为特定数据类型

数组和标量之间的运算

  1. arr=np.array([[1.,2.,3.],[4.,5.,6.]])    #创建二维数组
  2. arr*arr    #行列号相同的数组元素间运算
  3. arr-arr
  4. 1/arr
  5. arr*0.5

基本的索引与切片

  1. arr=np.arange(10)
  2. arr[5]    #索引第6个元素
  3. arr[5:8]    #索引第6到第9个元素作为数组
  4. arr[5:8]=12    #令第6到第9个元素等于12
  5. arr_slice=arr[5:8]    #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组
  6. arr_slice[:]=64    #将数组切片的全部元素改为64
  7. arr[5:8].copy()    #得到数组切片的一份副本
  8. arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
  9. arr2d[2]    #索引二维数组第3行
  10. arr2d[0][2]  arr2d[0,2]    #等价索引1行3列元素
  11. arr2d[:2]    #索引第1行和第2行(不含第3行)
  12. arr2d[:,:1]    #索引第1列
  13. arr2d[:-2]    #使用负数索引将从尾部开始选取行

数组转置和轴对换
    转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行复制操作)。

  1. arr=np.arange(15).reshape((3,5))    #生成顺序数组,后整形为3行5列
  2. arr.T    #转置
  3. arr=np.random.randn(6,3)    #randn函数生成一些正态分布的随机数组(6行3列)
  4. np.dot(arr.T,arr)    #利用np.dot计算矩阵内积XTX

通用函数:快速的元素级数组函数

通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。

  1. arr=np.arange(10)
  2. np.sqrt(arr)    #计算各元素的平方根(arr**0.5)
  3. exp  #计算各元素指数ex;  abs  #绝对值;
  4. np.add(x,y)  #x、y数组中对应元素相加;  subtract #相减;  multiply #相乘;  divide #相除;

利用数组进行数据处理

用数组表达式代替循环的做法,通常称为矢量化
    将条件逻辑表述为数组运算

Numpy.where函数是三元表达式x if condition else y的矢量化版本

  1. xarr=np.array([1.1,1.2,1.3,1.4,1.5])    #两个数值数组
  2. yarr=np.array([2.1,2.2,2.3,2.4,2.5])
  3. cond=np.array([True,False,True,True,False])    #一个布尔数组
  4. result=np.where(cond,xarr,yarr)    #三元表达式

数学和统计方法
    可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。Sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用:

  1. arr=np.random.randn(5,4)
  2. arr.mean();  np.mean(arr);  arr.sum();
  3. arr.mean(axis=1)    #计算该轴上的统计值(0为列,1为行)

用于布尔型数组的方法
    布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:

  1. arr=randn(100)
  2. (arr>0).sum()    #正值的数量
  3. bools.any()    #用于测试数组中是否存在一个或多个True
  4. bools.all()    #用于测试数组中所有值是否都是True

排序
    跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序(修改数组本身)。

  1. arr=randn(8)
  2. arr.sort()
  3. arr=randn(5,3)
  4. arr.sort(0)  #二维数组按列排序;  arr.sort(1)  #二维数组按行排序;

唯一化

  1. ints=np.array([3,3,3,2,2,1,1,4,4])
  2. np.unique(names)    #找出数组中的唯一值并返回已排序的结果

用于数组的文件输入输出
    Numpy能够读写磁盘上的文本数据或二进制数据。

  1. arr=np.arange(10)
  2. np.save(‘some_array’,arr)  #数组以未压缩的原始二进制格式保存在.npy文件中
  3. np.load(‘some_array’)  #通过np.load读取磁盘上的数组
  4. np.savez(‘array_archive.npz’,a=arr,b=arr)  #将多个数组以保存在一个压缩文件中
  5. a=np.arange(0,12,0.5).reshape(4,-1)
  6. np.savetxt(‘E:\\knakan\\a.txt’,a)  #缺省按照’%.18e’格式保存数据,以空格分隔
  7. np.loadtxt(‘E:\\kankan\\a.txt’)
  8. np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”)  #改为保存为整数,以逗号分隔
  9. np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”)  #读入时也需指定逗号分隔

线性代数

  1. x=np.array([[1.,2.,3.],[4.,5.,6.]])
  2. y=np.array([[6.,23.],[-1,7],[8,9]])
  3. x.dot(y)  #矩阵乘法,相当于np.dot(x,y)

【参考文献】

[1]. 利用Python进行数据分析,wes McKinney著,唐学韬译,2014年,机械工业出版社

Numpy基础笔记的更多相关文章

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

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

  2. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  3. python学习笔记(三):numpy基础

    Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...

  4. 【学习笔记】 第04章 NumPy基础:数组和矢量计算

    前言 正式开始学习Numpy,参考用书是<用Python进行数据清洗>,计划本周五之前把本书读完,关键代码全部实现一遍 NumPy基础:数组和矢量计算 按照书中所示,要搞明白具体的性能差距 ...

  5. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

  6. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  7. NumPy学习笔记 一

    NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  8. Numpy学习笔记(上篇)

    目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...

  9. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

随机推荐

  1. Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)

    Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...

  2. C#将数据以XML格式写入Excel

    本文转载:http://www.cnblogs.com/eflylab/archive/2008/09/21/1295580.html c#将数据导入Excel另类方法 今天公司突然给个Excel模版 ...

  3. 触发器记录表某一个字段数据变化的日志 包括插入insert 修改update 删除delete 操作

    本文参考:http://www.cnblogs.com/lyhabc/articles/3236985.html ,),  ),               ),           ),       ...

  4. 转自知乎,亲民好酒推荐 分类: fool_tree的笔记本 2014-11-08 17:37 652人阅读 评论(0) 收藏

    这里尽量为大家推荐一些符合大众喜好.业内公认好评."即使你不喜欢,你也会承认它不错"的酒款.而且介绍到的酒款还会有一个共同的特征,就是能让你方便的在网上买到. 大概会分为烈酒,利口 ...

  5. iOS NavigaitonController详解(code版)

    参考文章:http://blog.csdn.net/totogo2010/article/details/7681879,参考了这篇文章,写的超级好,自己他的基础上加上了自己的理解. 下面的图显示了导 ...

  6. 走进 Facebook POP 的世界

    POP: 一个流行的可扩展的动画引擎iOS,它支持spring和衰变动态动画,使其可用于构建现实,基于物理交互.Objective - C API允许快速集成, 对于所有的动画和过渡他是成熟的. 解释 ...

  7. app 的内存优化

    这篇文章是笔者在开发App过程中发现的一些内存问题, 然后学习了YYKit框架时候也发现了图片的缓存处理 (YYKit 作者联系了我, 说明了YYKit重写imageNamed:的目的不是为了内存管理 ...

  8. ssh登录很慢解决方法

    使用ssh客户端(如:putty)连接Linux服务器,可能会等待10-30秒才有提示输入密码.严重影响工作效率.登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因: 1. DNS反向解析问题 ...

  9. heibernate增删改查总结一下自己的不足

    难点也就我不熟悉的是数据库语句的书写,要加强复杂查询语句的书写 /* 简单的在共享类中已经可以用的了 * 总结: * * --------------------------------------查 ...

  10. MEF依赖注入调试小技巧!

    自从哥的项目使用MEF以来,天天那个纠结啊,甭提了.稍有错误,MEF就报错,但就不告诉你哪错了,大爷的. 后来看了MEFX的相关调试方法,感觉也不太理想,根本不够直观的看到错误原因,也许是没有深入学习 ...