利用Python进行数据分析——Numpy基础:数组和矢量计算

  • ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组
  • 对整组数据进行快速运算的标准数学函数,无需for—loop
  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具?
  • 线性代数、随机数生成以及傅里叶变换功能
  • 用于集成C/C++等代码的工具

一、ndarry:一种多维数组对象

1、创建ndarry

#一维
In [5]: data = [1,2,3]
In [6]: import numpy as np
In [7]: arr1 = np.array(data)
In [8]: arr1
Out[8]: array([1, 2, 3])
#二维
In [11]: data2 = [[1,2,3],[4,5,6]]
In [12]: arr2 = np.array(data2)
In [13]: arr2
Out[13]:
array([[1, 2, 3],
[4, 5, 6]])
#查看数组的信息
In [15]: arr2.shape
Out[15]: (2, 3)
In [16]: arr2.dtype
Out[16]: dtype('int32')

数组创建函数

array()

arange(),类似Python内置函数range(),但是range()返回的是列表

ones,zeros 创建一个全为1/0的数组,但是传进去的参数要是一个集合,例如np.ones((2,3))

ones_like,zeros_like 创建一个跟传进去数组形状一样的全1/0数组

empty,empty_like 创建空的数组,分配内存,不存值

eye,identity 创建方阵

2.数组和标量之间的运算

In [36]: arr2
Out[36]:
array([[1, 2, 3],
[4, 5, 6]])
In [37]: arr3
Out[37]:
array([[11, 12, 13],
[14, 15, 16]])
#加
In [38]: arr2+arr3
Out[38]:
array([[12, 14, 16],
[18, 20, 22]])
#乘
In [39]: arr2*arr3
Out[39]:
array([[11, 24, 39],
[56, 75, 96]])
#减
In [40]: arr3-arr2
Out[40]:
array([[10, 10, 10],
[10, 10, 10]])
#除
In [41]: arr3/arr2
Out[41]:
array([[11. , 6. , 4.33333333],
[ 3.5 , 3. , 2.66666667]])
#平方
In [42]: arr2**2
Out[42]:
array([[ 1, 4, 9],
[16, 25, 36]], dtype=int32)

3.索引和切片

索引:

arr2d[0,0]或者是arr2d[0][0]
arr3d[0,0,0]或者是arr3d[0][0][0]

切片:有标记

arr2d[:2,:2]
arr3d[:2,:2]

先区分数组和列表的操作

数组的切片是在原始数组上进行的,而列表的切片操作则是进行了数据的赋值

如果需要切片的是一份副本而不是源数组本身,需要arr[5:8].copy()

#列表的切片
>>> l1 = list(range(10))
>>> l1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l2 = l1[5:8]
>>> l2
[5, 6, 7]
>>> l2[0]=15
>>> l2
[15, 6, 7]
>>> l1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#数组的切片
In [50]: arr = np.arange(10) In [51]: arr
Out[51]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [52]: arr_slice = arr[5:8] In [53]: arr_slice
Out[53]: array([5, 6, 7]) In [54]: arr_slice[0]=15 In [55]: arr_slice
Out[55]: array([15, 6, 7]) In [56]: arr
Out[56]: array([ 0, 1, 2, 3, 4, 15, 6, 7, 8, 9]) #二维数组的切片
In [95]: arr2d
Out[95]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) In [96]: arr2d[:2]
Out[96]:
array([[1, 2, 3],
[4, 5, 6]])

一次可以传入多个切片

In [97]: arr2d[:2,:1]
Out[97]:
array([[1],
[4]]) In [98]: arr2d[:2,:2]
Out[98]:
array([[1, 2], #3维
In [83]: arr3d
Out[83]: [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]] In [84]: arr3d[1]
Out[84]: [[7, 8, 9], [10, 11, 12]] In [85]: arr3d[1][1]
Out[85]: [10, 11, 12] In [86]: arr3d[1][1][1]
Out[86]: 11 In [87]: arr3d[1][1][2]
Out[87]: 12

布尔型索引

#[True,False,True]就相当有是取第0/2行
In [121]: arr2d[[True,False,True]]
Out[121]:
array([[1, 2, 3],
[7, 8, 9]]) In [122]: arr2d[[True,False,True],2]
Out[122]: array([3, 9])

花式索引

#与上边的博布尔型索引一样,也是取第0/2行
In [132]: arr2d[[0,2]]
Out[132]:
array([[1, 2, 3],
[7, 8, 9]]) #花式索引注意以下问题

花式索引跟切片不同,总是将数据复制到新数组中,所以造成以下现象

In [136]: arr2d[[0,2],[0,2]]
Out[136]: array([1, 9]) In [137]: arr2d[[0,2]][:,[0,2]]
Out[137]:
array([[1, 3],
[7, 9]])

数组转置和轴对换

转置是重塑的一种特殊形式,它返回的是源数据的视图,不会进行复制操作。

In [142]: arr2d.T
Out[142]:
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])

4.对数组的元素进行操作的函数

对单个数组元素的操作函数

  • abs 计算绝对值
  • sqrt 计算各元素的平方根
  • square 计算各元素的平方
  • exp 计算各元素的以e为底的指数
  • log/log10/log2/log1p log1p是log(1+x)
  • sign 计算各元素的正负号
  • ceil 计算大于等于该元素的最小整数
  • floor 计算小于等于该元素的最大整数
  • rint 将该元素四舍五入到最接近的整数
  • modf 返回该元素的小数和整数部分,以两个独立数组的形式
  • isnan is not a number 判断各元素是否是数字
  • isfinite isinf 判断各元素有穷无穷
  • cos/sin/tan
  • arccos/acccosh/arcsin

对两个数组元素操作的函数

  • add 将数组中元素相加
  • subtract 第一个数组中元素减去第二个数组中元素
  • multiply 数组对应元素相乘
  • divide floor_divide 除法、丢弃余数的除法
  • power(a,b) 将a中元素计算b中对应元素 a的b次方
  • mod 求除法的余数
  • copysign 将第二个数组中的元素符号赋值给第一个数组中的值
  • < >= <= == != 比较对应元素的值

  • logical_and/logical_or/logical_xor

5.一些可以用数组来处理的运算

矢量化方便运算

三元运算

In [6]: xarr = np.array([1.1,1.2,1.3,1.4,1.5])

In [7]: yarr = np.array([2.1,2.2,2.3,2.4,2.5])

In [8]: cond = np.array([True,False,True,True,False])

In [9]: result = [x if c else y for x ,c ,y in zip(xarr,yarr,cond)]

In [10]: result
Out[10]: [1.1, 1.2, 1.3, 1.4, 1.5]

np.where通常用于根据一个数组生成另外一个数组

In [11]: result2 = np.where(cond,xarr,yarr)

In [12]: result2
Out[12]: array([1.1, 2.2, 1.3, 1.4, 2.5])

数学和统计方法

这些方法既可以当做实例方法调用arr2d.sum()也可以通过np.sum(arr2d)

  • sum 计算所有元素的和
  • mean 计算所有元素的均值
  • std/var 计算标准差和方差
  • min/max 最大值和最小值
  • argmin/argmax 最小值和最大值的索引
  • cumsum 返回一个所有元素累加的数组 累计和
  • cumprod 所有元素的累计积

用于布尔型数组的方法

#True直接当1计算
In [24]: (arr2d<4).sum()
Out[24]: 3 In [25]: cond
Out[25]: array([ True, False, True, True, False]) In [26]: cond.any()
Out[26]: True In [27]: cond.all()
Out[27]: False

排序

  • np.sort() 这个会复制一个副本
  • arr2d.sort()是在源数据上的操作

6.用于数组文件的输入输出

将数组以二进制形式保存到磁盘

  • np.save()
  • np.load()

存取文本文件

  • np.loadtext()
  • np.savetext()

7.线性代数 找不到时就在numpy.linalg

  • 注:转置 arr.T
  • np.dot(arr1,arr2) 两个矩阵的乘积
  • np.diag 返回对角线元素/或以一维数组转化为以此为对角线的方阵
  • trace() 计算对角线的和
  • det 计算f方阵的行列式值
  • eig 计算特征值和特征向量
  • inv 计算逆矩阵
  • pinv 计算伪逆矩阵
  • qr 计算QR分解
  • svd 计算奇异值分解
  • solve 解线性方程Ax=b
  • lstsq 计算Ax=b的最小二乘解

8.随机数生成 numpy.random对Python内置的random进行了补充

  • seed 确定随机数生成的种子
  • permutation 返回一个序列的随机排列或返回一个随机排列的范围
  • shuffle 对一个序列就地随机排列
  • rand 产生均匀分布的样本值
  • randint 从给定的上下范围内随机选取整数
  • randn 产生正态分布的样本值
  • binomial 产生二项分布的样本值
  • normal 产生二项分布的样本值
  • beta 产生Beta分布的样本值
  • chisquare 产生卡方分布的样本值
  • gamma 产生Gamma分布的样本值
  • uniform 产生(0,1)均匀分布的样本值

利用Python进行数据分析——Numpy基础:数组和矢量计算的更多相关文章

  1. python数据分析 Numpy基础 数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

  2. python numpy基础 数组和矢量计算

    在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率, 类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算. 下面来看下简单 ...

  3. 利用python进行数据分析--numpy基础

    随书练习,第四章  NumPy基础:数组和矢量运算 # coding: utf-8 # In[1]: # 加注释的三个方法1.用一对"""括起来要注释的代码块. # 2. ...

  4. 利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)

    4.2 通用函数:快速的元素级数组函数 通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数. 1)一元(unary)ufunc,如,sqrt和exp函数 2)二元(unary) ...

  5. 利用Python进行数据分析_Numpy_基础_2

      Numpy数据类型包括: int8.uint8.int16.uint16.int32.uint32.int64.uint64.float16.float32.float64.float128.co ...

  6. 利用Python进行数据分析_Numpy_基础_1

    ndarray:多维数组 ndarray 每个数组元素必须是相同类型,每个数组都有shape和dtype对象. shape 表示数组大小 dtype 表示数组数据类型 array 如何创建一个数组? ...

  7. 利用Python进行数据分析_Numpy_基础_3

    通用函数:快速的元素级数组函数 通用函数,是指对数组中的数据执行元素级运算的函数:接受一个或多个标量值,并产生一个或多个标量值. sqrt 求平方根 np.sqrt(arr) exp 计算各元素指数 ...

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

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

  9. 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

    <利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...

随机推荐

  1. python与mongodb的交互 增删改差

    首先引入包: pip install pymongo需要用到如下对象: MongoClient对象:用于与MongoDB服务器建立连接 client=MongoClient('主机ip',端口) Da ...

  2. JavaScript 评论添加练习

    JavaScript 评论添加练习 本次所学内容: //var str = '<li>'+value+'</li>'; 支付串和变量的拼接 //ul.innerHTML += ...

  3. python打包压缩文件夹zip+组装文件夹

    无意间想到的一个需求,然后就顺手写了写,留下来,方便以后用 列表版:(基本没用,仅提供思路,字典版稍微改动可以直接用) 大体需求: 把重复的文件名进行改名,达到浏览器下载相同文件的效果 下载完成后再把 ...

  4. Android:触屏事件

    Android触屏事件包含两种: 1)屏幕触屏事件:重写onTouchEvent(MotionEvent event): 2)控件触屏事件:给控件注册触屏事件,setOnTouchEventListe ...

  5. ansible批量加用户

    ansible批量加用户 1.生成密码 pip install passlib python -c "from passlib.hash import sha512_crypt; print ...

  6. cookielib和urllib2模块结合模拟网站登录

    1.cookielib模块 cookielib模块的主要作用就是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问internet资源,例如可以利用本模块的cookiejar类的对 ...

  7. SQL基础----DCL

    在之前的文章已经讲到SQL基础DDL(数据库定义语句 http://www.cnblogs.com/cxq0017/p/6433938.html)和 DML(数据库操作语句 http://www.cn ...

  8. 【实验吧】CTF_Web_天下武功唯快不破

    打开链接"http://ctf5.shiyanbar.com/web/10/10.php",从页面内容未发现明显信息,查看源代码发现"please post what y ...

  9. [AHOI 2016初中组]迷宫

    Description 小雪和小可可被困在了一个无限大的迷宫中. 已经知道这个迷宫有 N 堵环状的墙,如果把整个迷宫看作是一个二维平面,那么每一堵墙都是平面上一个圆.任意两个圆不相交,不重合,也不会相 ...

  10. 51nod 1103 N的倍数(抽屉原理)

    1103 N的倍数 题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍 ...