数据分析之Numpy-数组计算

引言 : python

  数据分析 : 就是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出研究对象的内在规律 . 数组

  数据分析三剑客 : Numpy   数组计算dom

           Pandas   表计算与数据分析ide

           Matplotlib   绘图和可视化函数

一 . NumPy 

1 . NumPy(Numerical Python) 是 python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算 , 此外也针对数组运算提供大量的数学函数库工具

2 . NumPy是高性能科学计算和分析的性能

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

3 . 安装方法 : spa

  pip install numpy 3d

二 . 建立ndarray  

  注意 : 示例均是在jupyter上演示的code

 1 . 使用 np.array() 建立

# 导包
# 一般都将 numpy简化成np
import numpy as np  

   1) . 一维数组的建立 

np.array([1,2,3,4.5])

  2) . 二维数组的建立   np.array([[1,2,3,4],[5,6,7,8]])

注意 : 

  • numpy默认ndarray的全部元素的类型是相同的
  • 若是传进来的列表中包含不一样的类型,则统一为同一类型,优先级:str>float>int

     

  3) . 使用matplotlib.pyplot获取一个numpy数组,数据来源于图片

 

2 . 使用 np 的 routines 函数建立 

建立ndarray:
    array()         将列表转换为数组,可选择显式指定dtype
    arange()        range的numpy版,支持浮点数
    linspace()      相似arange(),第三个参数为数组长度
    zeros()         根据指定形状和dtype建立全0数组
    ones()          根据指定形状和dtype建立全1数组
    empty()         根据指定形状和dtype建立空数组(随机值)
    eye()           根据指定边长和dtype建立单位矩阵

    例如 : 

 

三 . ndrray---多维数组对象   

 1 . 经常使用属性 : 

  • T 数组的转置(对高维数组而言)
  • dtype 数组元素的数据类型
  • size 数组元素的个数
  • ndim 数组的维数
  • shape 数组的维度大小(以元组形式)

2 . 经常使用方法 : 

array.shape                         array的规格
array.ndim      
array.dtype                         array的数据规格
numpy.zeros(dim1,dim2)              建立dim1*dim2的零矩阵
numpy.arange
numpy.eye(n) /numpy.identity(n)     建立n*n单位矩阵
numpy.array([…data…], dtype=float64 )
array.astype(numpy.float64)         更换矩阵的数据形式
array.astype(float)                 更换矩阵的数据形式
array * array                       矩阵点乘
array[a:b]                          切片
array.copy()                        获得ndarray的副本,而不是视图
array [a] [b]=array [ a, b ]        二者等价
name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool)
data[True,False,…..]                索引,只索取为True的部分,去掉False部分
经过布尔型索引选取数组中的数据,将老是建立数据的副本。
data[ [4,3,0,6] ]                   索引,将第4,3,0,6行摘取出来,组成新数组
data[-1]=data[data.__len__()-1]
numpy.reshape(a,b)                  将a*b的一维数组排列为a*b的形式
array([a,b,c,d],[d,e,f,g])          返回一维数组,分别为[a,d],[b,e],[c,f],[d,g]
array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ]
array.T                             array的转置
numpy.random.randn(a,b)             生成a*b的随机数组
numpy.dot(matrix_1,matrix_2)        矩阵乘法
array.transpose( (1,0,2,etc.) )     对于高维数组,转置须要一个由轴编号组成的元组

 

四 . ndarray的基本操做   

1、数组和标量之间的运算
    a+1    a*3    1//a    a**0.5
2、一样大小数组之间的运算
    a+b    a/b    a**b
3、数组的索引:
    一维数组:a[5]
    多维数组:
        列表式写法:a[2][3]
        新式写法:a[2,3] (推荐)
   数组的切片:
        一维数组:a[5:8]    a[4:]        a[2:10] = 1
        多维数组:a[1:2, 3:4]    a[:,3:5]        a[:,1]
4、强调:与列表不一样,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。    【解决方法:copy()】

 1 . 索引  

      一维与列表彻底一致 , 多维同理

 

2 . 切片

    1) .  一维与列表彻底相同 , 多维同理

 

    2) . 将数据进行反转 , 例如 : [1,2,3] --> [3,2,1]

   3) . 对图片进行操做

   

 

3 . 变形  

  使用 reshape()函数,注意一个参数是 --- tuple ! 

4 . 级联 

  np.concatenate() 

 

 

级联须要注意的点:

  • 级联的参数是列表:必定要加中括号或小括号
  • 维度必须相同
  • 形状相符:在维度保持一致的前提下,若是进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。若是进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
  • 可经过axis参数改变级联的方向

5 . 切割

  给图片进行切割 

原图片 : 

 

五 . 数学和统计方法  

经常使用函数:

    sum    求和
    cumsum 求前缀和
    mean    求平均数
    std    求标准差
    var    求方差
    min    求最小值
    max    求最大值
    argmin    求最小值索引
    argmax    求最大值索引

 

 

六 . ndarray的排序  

 np.sort() 和 ndarray.sort() 的区别 : 

  • np.sort()  不改变输入
  • ndarray.sort()  本地处理,不占用空间,但改输入

 

 

 

七 . 随机数生成  

随机数生成函数在np.random子包内
经常使用函数 : 

    • rand 给定形状产生随机数组(0到1之间的数)
    • randint 给定形状产生随机整数
    • choice 给定形状产生随机选择
    • shuffle 与random.shuffle相同
    • uniform 给定形状产生随机数组