利用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输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算相关推荐

  1. python输入坐标求面积_利用python中的坐标计算多边形面积

    您没有正确实现Shoelace formula.我修改了一点你的代码来修复它:sum1=0.0 sum2=0.0 b=input("Number of corners: ") ma ...

  2. python读取csv求平均数_利用Python读取CSV文件并计算某一列的均值和方差

    近日需要对excel的csv文件进行处理,求取某银行历年股价的均值方差等一系列数据 文件的构成很简单,部分如下所示 总共有接近七千行数据,主要的工作就是将其中的股价数据提取出来,放入一个数组之中,然后 ...

  3. python用渐变色画圆_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  4. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  5. python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结

    利用Python实现对考勤打卡数据处理的总结 一.背景交代 二.说明 三. 8种方法 1. 查看文件是否存在 2. 导入excel文件,并把数据保存为dataframe格式 3. 计算程序运行时间 4 ...

  6. python自动生成word报告_利用Python实现报告自动生成

    前几天,在网上看到一篇介绍利用Python组件实现MS word内容生成的文章.可能是很久没接触编码,感觉在技术领域变得有点孤陋寡闻了,看见一些实用的功能都觉的屌屌的.以前经常通过代码写Excel文件 ...

  7. python怎么去掉视频字幕_利用Python实现字幕挂载(把字幕文件与视频合并)思路详解...

    其实超简单超简单!python好现成的库,一下子省略了好多步骤! 本文在Windows环境下!linux只是不需要手动输入imagicmagick的位置! 需要用到的环境 python(基本上只要不是 ...

  8. python制作心形照片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  9. python 物理学中的应用_利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...

最新文章

  1. 如何成为一名现代的Linux程序员
  2. puppet原理及配置
  3. dods 机器人_胜利之日机器人补丁
  4. runloop - 介绍
  5. java 类无法实例_Java无法从类实例访问类方法
  6. Magento: 解决 Bootstrap 3 与prototype并用的时候, 下拉菜单消失的问题 Bootstrap 3 dropdown menu dis...
  7. PostgreSQL中查看版本的几种方式
  8. html 甘特图_工具项目管理工具详解——甘特图
  9. [刘阳Java]_CSS数字分页效果
  10. Servlet chapter 1
  11. HBuilderX的各版本软件自取
  12. 机器学习笔记 - 使用Keras + Unet 进行图像分割
  13. 云杰恒指:7.29恒指期货实盘指导交易复盘
  14. 微信 css area,微信小程序--手写一个地区选择器(多级联动)
  15. 基于51单片机手机电话拨号盘模拟proteus仿真
  16. 第一章 计算机基础知识【信息学奥赛】
  17. 使用 Web3.js 进行 Matic 测试网上链操作
  18. hbuilder能用python_hbuilder之开发Python。
  19. 【深度学习小知识】K-means聚类
  20. JDK11 新特性详解

热门文章

  1. Wpf TextChanged事件导致死循环,事件触发循环问题
  2. Python脚本配合Linux计划任务工作
  3. 关于css3的自定义字体
  4. PLSQL设置显示的字符集及PLSQL的一些自身设置
  5. 遍历 List 之效率
  6. 笔记本上使用Archlinux[转]
  7. Linux如何修改用户名?
  8. 9开头的两位数相乘速算法
  9. js es6 reduce用法示例:实现数据累加
  10. docker 端口映射 及外部无法访问问题:开启IP转发从而解决