博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 数据分析----numpy
阅读量:5029 次
发布时间:2019-06-12

本文共 5005 字,大约阅读时间需要 16 分钟。

NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础.

NumPy的主要功能:

  • ndarray,一个多维数组结构,高效且节省空间
  • 无需循环对整组数据进行快速运算的数学函数
  • *读写磁盘数据的工具以及用于操作内存映射文件的工具
  • *线性代数、随机数生成和傅里叶变换功能
  • *用于集成C、C++等代码的工具

安装方法:pip install numpy

引用方式:import numpy as np

NumPy的主要对象是同质多维数组它是一张表,所有元素(通常是数字)的类型都相同,并通过正整数元组索引.NumPy的数组的类称为ndarray别名为array

创建ndarray:

  • array() 将列表转换为数组,可选择显式指定dtype
    In [17]: import numpy as npIn [18]: a = np.array([2,3,4])In [19]: aOut[19]: array([2, 3, 4])
  • arange() range的numpy版,支持浮点数
    In [21]: a = np.arange(10,30,5)##(10 ,30 是指定范围,5步长,步长支持小数)In [22]: aOut[22]: array([10, 15, 20, 25])In [23]: a = np.arange(10,30,0.5)In [24]: aOut[24]: array([ 10. ,  10.5,  11. ,  11.5,  12. ,  12.5,  13. ,  13.5,  14. ,        14.5,  15. ,  15.5,  16. ,  16.5,  17. ,  17.5,  18. ,  18.5,        19. ,  19.5,  20. ,  20.5,  21. ,  21.5,  22. ,  22.5,  23. ,        23.5,  24. ,  24.5,  25. ,  25.5,  26. ,  26.5,  27. ,  27.5,        28. ,  28.5,  29. ,  29.5])
  • linspace() 类似arange(),第三个参数为数组长度
  • In [25]: a = np.linspace(0,2,9)## 将【0,2】分成九份In [26]: aOut[26]: array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])
  • zeros() 根据指定形状和dtype创建全0数组
    In [28]: a = np.zeros((3,2),dtype=np.int64)#第一个参数是元祖,表明创建个几行几列的数据 # dtype 表示数据类型In [29]: aOut[29]: array([[0, 0],       [0, 0],       [0, 0]])
  • ones() 根据指定形状和dtype创建全1数组
  • empty() 根据指定形状和dtype创建空数组(随机值)(函数empty内容是随机的并且取决于存储器的状态。默认情况下,创建的数组的dtype为float64)
  • eye() 根据指定边长和dtype创建单位矩阵

ndarray基本属性:

  ndarray.ndim
    数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank
  ndarray.shape
  数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于具有n行和m列的矩阵,shape    将是(n,m)因此,shape元组的长度就是rank或维度的个数ndim
  ndarray.size
  数组元素的总数。这等于shape的元素的乘积。
  ndarray.dtype
  描述数组中元素类型的对象。可以使用标准Python类型创建或指定dtype。另外NumPy提供了自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
  ndarray.itemsize
  数组中每个元素的字节大小。例如,元素为float64类型的数组的itemsize为8(=64/8),而complex32类型的数组的comitemsize为4(=32/8)。它等于ndarray.dtype.itemsize
  ndarray.data
  该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问数组中的元素。
 基本操作
加减:

数组和标量之间的运算

  a+1 a*3 1//a a**0.5

同样大小数组之间的运算

In [30]: a = np.array([20,30,40,50])In [31]: b = np.arange(4)In [32]: aOut[32]: array([20, 30, 40, 50])In [33]: bOut[33]: array([0, 1, 2, 3])In [34]: c = a - bIn [35]: cOut[35]: array([20, 29, 38, 47])

乘法运算符*的运算在NumPy数组中是元素级别的。

可以使用dot函数或方法执行矩阵乘积:

In [36]: aOut[36]: array([20, 30, 40, 50])In [37]: bOut[37]: array([0, 1, 2, 3])In [38]: a*bOut[38]: array([  0,  30,  80, 150])

In [39]: a.dot(b)

Out[39]: 260

###矩阵乘法复习:

 

默认情况下,这些操作适用于数组,就像它是一个数字列表,而不管其形状。但是,通过指定axis参数,你可以沿着数组的指定轴应用操作:

>>> b = np.arange(12).reshape(3,4)>>> barray([[ 0,  1,  2,  3],       [ 4,  5,  6,  7],       [ 8,  9, 10, 11]])>>>>>> b.sum(axis=0)                            # sum of each columnarray([12, 15, 18, 21])>>>>>> b.min(axis=1)                            # min of each rowarray([0, 4, 8])>>>>>> b.cumsum(axis=1)                         # cumulative sum along each row(每个数和这个数之前所有数的和)array([[ 0,  1,  3,  6],       [ 4,  9, 15, 22],       [ 8, 17, 27, 38]])

通用函数能同时对数组中所有元素进行运算的函数

常见通用函数:

  • 一元函数:abs(绝对值), sqrt(平方), exp, log, ceil, floor, rint, trunc, modf, isnan(判断是否是nan), isinf(判断是否是inf), cos, sin, tan
  • 二元函数:add, substract, multiply, divide, power, mod,  maximum, mininum

索引、切片和迭代:

一维数组索引:(和列表几乎差不多)

In [49]: aOut[49]: array([20, 30, 40, 50])In [50]: a[1]Out[50]: 30

二维/多维数组索引

In [51]: bOut[51]: array([[ 1,  2,  3,  4],       [10, 11, 12, 13]])In [52]: b[1][2]Out[52]: 12In [53]: b[1,2]. #推荐这种Out[53]: 12

布尔型索引:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组

In [59]: bOut[59]: array([[ 1,  2,  3,  4],       [10, 11, 12, 13]])In [60]: b<5Out[60]: array([[ True,  True,  True,  True],       [False, False, False, False]], dtype=bool)In [61]: b[b<5]Out[61]: array([1, 2, 3, 4])

花式索引:(索引的值也是索引)

对一个二维数组,选出其第一列和第三列,组成新的二维数组。

In [64]: bOut[64]: array([[ 1,  2,  3,  4],       [10, 11, 12, 13]])In [65]: c = b[:,[1,3]] ##(里面的【1,3】指的是第1和3列)In [66]: cOut[66]: array([[ 2,  4],       [11, 13]])

切片:

In [67]: aOut[67]: array([20, 30, 40, 50])In [68]: a[1:3]Out[68]: array([30, 40])In [71]: b = np.arange(20).reshape(4,5)In [72]: bOut[72]: array([[ 0,  1,  2,  3,  4],       [ 5,  6,  7,  8,  9],       [10, 11, 12, 13, 14],       [15, 16, 17, 18, 19]])In [73]: b[1:3]Out[73]: array([[ 5,  6,  7,  8,  9],       [10, 11, 12, 13, 14]])

与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。 【解决方法:copy()

In [74]: aOut[74]: array([20, 30, 40, 50])In [75]: c = a[1:3]In [76]: cOut[76]: array([30, 40])In [77]: c[0] = 11In [78]: cOut[78]: array([11, 40])In [79]: aOut[79]: array([20, 11, 40, 50])In [80]: c = a[1:3].copy()In [82]: cOut[82]: array([11, 40])In [83]: c[0] = 99In [84]: cOut[84]: array([99, 40])In [85]: aOut[85]: array([20, 11, 40, 50])

In [122]: b

Out[122]: 

array([[ 0,  1,  2,  3,  4],

       [ 5,  6,  7,  8,  9],

       [10, 11, 12, 13, 14],

       [15, 16, 17, 18, 19]])

 

In [123]: c = b[1:3,1:3]

 

In [124]: c

Out[124]: 

array([[ 6,  7],

       [11, 12]])

常用函数:

  • sum 求和
  • mean 求平均数
  • std 求标准差
  • var 求方差
  • min 求最小值
  • max 求最大值
  • argmin 求最小值索引
  • argmax 求最大值索引
  • rand 给定形状产生随机数组(0到1之间的数)
  • randint 给定形状产生随机整数
  • choice 给定形状产生随机选择
  • shuffle 与random.shuffle相同(重新洗牌,随机打乱)
  • uniform 给定形状产生随机数组

 

 

 

 

 

转载于:https://www.cnblogs.com/mona524/p/7754132.html

你可能感兴趣的文章
git常见问题
查看>>
.NETFramework:template
查看>>
HM16.0之帧内模式——xCheckRDCostIntra()函数
查看>>
Jmeter性能测试 入门
查看>>
安卓动画有哪几种?他们的区别?
查看>>
Nodejs学习总结 -Express入门(一)
查看>>
web前端优化
查看>>
ssh 连接原理及ssh-keygen
查看>>
vs2013编译qt程序后中文出现乱码
查看>>
【转】IOS数据库操作SQLite3使用详解
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
【转】ButterKnife基本使用--不错
查看>>
【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”...
查看>>
函数中关于const关键字使用的注意事项
查看>>
微信架构(转)
查看>>
Web项目中的路径问题
查看>>
js随机数的取整
查看>>
关于解析漏洞
查看>>
十大经典预测算法(六)---集成学习(模型融合算法)
查看>>
用php做一个简单的注册用户功能
查看>>