• Python数据分析-Numpy


    Numpy

    个人笔记,仅供参考,谢谢

    导入

    import numpy
    import numpy as np
    from numpy import *
    
    • 1
    • 2
    • 3

    Numpy数组对象

    1. 引入
    # 让列表+1
    a = [1,2,3,4],b = [4,5,6,7]
    [x+1 for x in a]
    # 实现a+b
    a + b => [1,2,3,4,5,6,7,8]
    [x + y for (x,y) in zip(a,b)]
    -----------
    # numpy
    a = np.array([1,2,3,4])
    a+1 => array([2,3,4,5])
    b = np.array([2,3,4,5])
    a + b =>array([3,5,7,9])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 产生数组
    # 从列表产生:
    lst = [1,2,3]
    a = np.array(lst)
    # 从列表传入
    a = np.array([1,2,3])
    # 生成全0数组
    np.zeros(5)
    => array([0.,0.,0.,0.,0.,]) # 默认浮点数
    # 生成全1数组
    np.ones(3)
    => array([1.,1.,1.])
    np.ones(3,dtype='int') # 转换为整型,bool...
    # fill 填充
    a=np.array([1,2,3])
    a.fill(6) # 所有元素变为6,长度取决于a原先的长度
    a.fill(2.5) # 得到2,因为dtype = int,与列表不同
    a = a.astype('float') # 类型强转
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    1. 生成整数序列
    a=np.arange(1,10) # 左闭右开,默认增1
    a=np.arange(1,10,2) # (left, right, step)
    
    • 1
    • 2
    1. 生成等差序列
    a = np.linspace(1,10,4) # 等差数列,左闭右闭,4为数列长度
    
    • 1
    1. 生成随机数
    np.random.rand(10) # 产生[0,1)的10个随机数
    np.random.randn(10) # 产生标准正态分布[0,1)的10个随机数
    np.random.randint(1,10,6)# 从1 到 10 的6个随机整数
    
    • 1
    • 2
    • 3
    1. 数组属性
    # 数组的数据类型
    type(a)
    # 查看数组元素数据类型
    a.dtype
    # 查看性状,每维的长度(n,m)
    a.shape
    # 查看元素数目
    a.size
    # 查看维度 1,2,3...
    a.ndim
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 索引与切片
    # 索引
    a=np.array([0,1,2,3])
    a[0] # 索引
    a[0] = 1 # 修改py
    # 切片,支持负索引
    a[1:3] # 左闭右开
    <=> a[1:-2] <=> a[-3,3]
    # 省略参数
    a[-2:] # -2到最后
    a[::2] <=> a[1:a.size:2]
    # 差分
    a=[1,2,3,4]
    rst = a[1:] - a[:-1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    多维数组及其属性

    1. 定义
    a = np.array([[1,2],[3,4]]) # 二维数组,广义表
    np.array([[[1,2],[2,0]],[[3,5],[6,7]]])
    # 从外到内每对括号降一次维度
    a.shape => (2,4) ; 24列
    a.size  => 4
    a.ndim	=> 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 索引
    a[1,1] => 4
    a[0,0] => 1
    a[0,1] = -1 # 赋值操作
    a[1] => [1,2] # 
    a[:,1] => array([1, 11]) # 第二列
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 多维数组切片
    a = np.array([0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45])
    a[0,3:5] # 第一行的3-4号元素,左闭右开
    a[4:,4:] # 得到第4,5行的最后两列
    # 对于每一维都支持切片的规则,包括父索引
    [lower:upper:step]
    a[::2,:] # 取出奇数行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 切片是引用
    a=np.array([0,1,2,3,4])
    b=a[2:4]
    print(b)
    b[0]=10
    a # a 的值已经发生改变。 // 如果是列表则产生新列表
    # 解决方案
    a=np.array([0,1,2,3,4])
    b=a[2:4].copy(); # 调用数组的方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 花式索引
    a=np.arange(0,100,10)
    index = [1,2,-3]
    y = a[index]; # 666,玩的真花啊
    # 布尔数组
    mask = np.array([0,1,0,1,0,1,0,1,1,0],dtype=bool)
    a[mask]; # 顾名思义,mask,必须与a等长
    # 二维花式
    a = np.array([0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55])
    取出次对角线的5个值:
     a[(0,1,2,3,4),(1,2,3,4,5)] # 一一对应成对
    取出最后三行135列
    a[3:,[1,2,5]]; # 
    a[:3],取出前三行
    a[:,:3],取出前三列
    a[:2,:3] 取出前2行三列
    # 花式bool
    mask=np.array([0,1,1,0,1,0]);
    a[mask]; # 取出2,3,5行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    where语句

    a=np.array([0,12,5,20])
    a > 10 # 返回array(false,true,false,true)
    np.where(a > 10);# 返回所有大于10元素的索引位置
    # 返回的是一个元组
    a[a>10]; # 返回大于10的元素,花式了
    a[np.where(a>10)] # 同样
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    数组类型

    • 类型转换
    a = np.array([1,5,-3],dtype=float)
    a = np.array([1,2,3])
    b = np.asarray(a,dtype=float)
    b = a.astype(float)
    
    • 1
    • 2
    • 3
    • 4

    数组操作

    • sort函数
    a = np.array(1,3,2)
    b = np.sort(a) # 默认升序
    
    
    • 1
    • 2
    • 3
    • argsort函数
    order = np.argsort(a)  # 得到排序后元素在原来数组中的位置
    
    • 1
    • 聚合函数
    np.sum(a)
    # a.sum()
    np.max(a)
    # a.max()
    np.min(a)
    # a.min()
    np.mean()
    # a.mean()
    np.std()
    #np.std() 标准差
    np.cov(a,b) # 相关系数矩阵
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 数组形状

      a=np.arange(6)
      a.shape = 2,3
      b = a.reshape(2,3)
      
      • 1
      • 2
      • 3
    • 转置

    a.T # /a.transpose(), 不改变原值
    
    • 1
    • 数组连接
    concatenate((a0,a1,...,an),axis=0)
    x = np.array([[0,1,2],[10,11,12]])
    y = np.array([[50,51,52],[60,61,62]])
    print(x.shape)
    print(y.shape)
    # 默认沿着第一维连接, 最内侧的括号是第一维
    z = np.concatenate(x,y)
    z = np.concatenate((x,y),axis = 1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # 堆叠函数 
    np.vstack((x,y))
    np.hstack((x,y))
    np.dstack((x,y)) # 3维
    
    • 1
    • 2
    • 3
    • 4

    内置函数

    np.abs(a)
    np.exp(a)
    np.median(a) # 中值
    np.cumsum(a) # 前缀和
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5

    练习

    import numpy as np
    a = np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
    a
    
    • 1
    • 2
    • 3
    array([[ 0,  1,  2,  3,  4,  5],
           [10, 11, 12, 13, 14, 15],
           [20, 21, 22, 23, 24, 25],
           [30, 31, 32, 33, 34, 35],
           [40, 41, 42, 43, 44, 45],
           [50, 51, 52, 53, 54, 55]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    a[:2,:3]
    
    • 1
    array([[ 0,  1,  2],
           [10, 11, 12]])
    
    • 1
    • 2
    b=np.array([0,2,66,2,77])
    b[np.where(b<10)]
    np.where(b<10)
    
    • 1
    • 2
    • 3
    (array([0, 1, 3], dtype=int64),)
    
    • 1
    a=np.array([1,2,3])
    np.asarray(a,float)
    
    • 1
    • 2
    array([1., 2., 3.])
    
    • 1
    a = np.array([1,2,3])
    b = np.array([2,4,5])
    np.cov(a,b)
    
    • 1
    • 2
    • 3
    array([[1.        , 1.5       ],
           [1.5       , 2.33333333]])
    
    • 1
    • 2
    import pandas as pd
    a = pd.Series([1,2,3],index = ['a',2,3])
    a['a']
    a.values
    a.astype(float)
    a.name
    a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    a    1
    2    2
    3    3
    dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    import numpy as np
    a = np.array([3]*4)
    a
    
    • 1
    • 2
    • 3
    array([3, 3, 3, 3])
    
    • 1
    df2 = pd.DataFrame({'A':1.,'B':pd.Timestamp('20181001'),'C':pd.Series(1,index=list(range(4)),dtype = float),'D':np.array([3]*4,dtype=float),'E':
    pd.Categorical(['test','train','test','train']),'F':'anc'})
    df2
    
    • 1
    • 2
    • 3
    ABCDEF
    01.02018-10-011.03.0testanc
    11.02018-10-011.03.0trainanc
    21.02018-10-011.03.0testanc
    31.02018-10-011.03.0trainanc
    df2.drop(['A','B'],axis = 1)
    
    • 1
    CDEF
    01.03.0testanc
    11.03.0trainanc
    21.03.0testanc
    31.03.0trainanc
    df2.index = list('abcd')
    df2
    df2.loc['a','B']
    
    • 1
    • 2
    • 3
    Timestamp('2018-10-01 00:00:00')
    
    • 1
    df2
    df2.loc['a','E'] = np.nan
    df2.dropna(inplace=True)
    df2[]
    
    • 1
    • 2
    • 3
    • 4
    ABCDEF
    b1.02018-10-011.03.0trainanc
    c1.02018-10-011.03.0testanc
    d1.02018-10-011.03.0trainanc
  • 相关阅读:
    Vue 2使用element ui 表格不显示
    openssl创建CA证书教程
    鼠标、键盘、窗口监听事件
    供应商关系管理的重要性
    clickhouse单机部署
    香港服务器,应该选用中国站 还是国际站?
    【国密SM2】基于Hutool的SM2公私钥生成、签名验签(二十行代码搞定)
    STL-vector
    【Mybatis编程:根据id查询相册数据详情】
    记CVE-2022-39227-Python-JWT漏洞
  • 原文地址:https://blog.csdn.net/qq_61832249/article/details/132689342