美文网首页
python进阶-03-numpy

python进阶-03-numpy

作者: 西海岸虎皮猫大人 | 来源:发表于2020-03-15 17:19 被阅读0次

    1 概述

    科学计算基础库,提供大量科学计算功能
    核心类型ndarray(多维数组)
    支持向量处理
    底层是c写的,效率高

    安装

    pip install numpy
    报错:

    Could not find a version that satisfies the requirement numpy (from versions: )...
    

    根据提示,执行:

    python -m pip install --upgrade pip
    

    下载速度较慢
    重新执行:

    pip install numpy
    

    依然较慢
    配置阿里云镜像,参考:
    https://www.cnblogs.com/ipaomi/p/7798223.html

    第一行程序
    # coding=utf-8
    import numpy as np
    a = np.arange(10)
    print(a)
    # 类型ndarray
    print(type(a))
    # 对每个元素开平方
    # 传统方式需要遍历,开平方,然后存入列表
    # 使用numpy进行向量处理
    b = np.sqrt(a)
    print(b)
    

    2 创建数组

    # array创建
    可将列表创建为ndarray
    import numpy as np
    
    # 创建一维数组
    a = np.array([1,2,3,4])
    print(a)
    print(type(a))b
    
    # 创建二维数组
    b = np.array([[1,2,3], [4,5,6],[7,8,9]])
    print(b)
    
    # 三维以上类似
    # array中dtype的使用
    # 设置数组中元素的类型
    d = np.array([3,4,5], dtype=float)
    
    # ndim指定维度
    # 3维
    e = np.array([5,6,7], ndim=3)
    

    3 arange创建数组

    import  numpy as np
    # arange创建数组
    # 与range类似(start,end,step) 左闭右开,步长为1
    # 1-10
    a = np.arange(1,11)
    # 1-10 步长2
    b = np.arange(1,11,2)
    # 指定元素类型为浮点型
    c = np.arange(10,20,2,dtype=float)
    

    4 随机创建数组

    random随机数创建
    import numpy as np
    # 使用random创建一维数组,元素取值[0.0,1.0)
    a = np.random.random(size=5)
    print(a)
    
    # 使用random创建二维数组
    b = np.random.random(size=(3,4))
    print(b)
    
    随机整数
    # 0-5之间随机整数
    c = np.random.randint(6, size=10)
    print(c)
    
    # 5-10之间,二维,4行3列,高维类似
    d = np.random.randint(5,11, size=(4,3))
    

    5 指定元素类型 | 标准正态分布

    指定元素类型dtype
    # 指定元素类型,默认np.int
    e  = np.random.randint(10,size=5,dtype=np.int64)
    # 打印元素类型
    print(e.dtype)
    
    创建标准正态分布
    # 1维,4个元素
    a = np.random.randn(4)
    print(a)
    # 2维,2行3列,高维类似
    a = np.random.randn((2,3))
    
    指定方差和期望
    # 1维5个数,期望默认为loc=0.0,方差scale=1.0
    a = np.random.normal(size=5)
    # 指定期望和方差
    # 期望2,方差3,2维3行4列
    b = np.random.normal(loc=2,scale=3,size=(3,4))
    

    6 ndarray对象属性

    常用属性

    ndim 维度
    shape 形状
    size 元素总个数等
    ...
    参考文档

    import numpy as np
    
    # 创建1维数组
    a = np.array([1,2,3,4])
    # 创建2维数组
    b = np.random.randint(4,10,size=(2,3))
    # 创建3维数组
    c = np.random.randn(2,3,4)
    
    # 维度
    print('ndim', a.ndim,b.ndim,c.ndim)
    # 形状
    print('shape', a.shape,b.shape,c.shape)
    # 元素类型
    print('dtype', a.dtype,b.dtype,c.dtype)
    # 总个数
    print('size', a.size,b.size,c.size)
    # 元素对象大小
    print('itemsize', a.itemsize,b.itemsize,c.itemsize)
    

    7 其他创建数组方式

    0元素数组 - zeros
    import numpy as np
    
    # 5个元素,每个元素都是浮点数0.0
    np.zeros(5)
    # 指定类型为整数
    np.zeros((5,), dtype=int)
    # 2维
    np.zeros((3,4))
    
    1元素数组 - ones
    np.ones(10)
    np.ones((2,5), dtype=int)
    
    empty

    元素的值是之前内存的值,未初始化
    empty创建效率更高

    a = np.empty(8)
    a = np.empty((3,4))
    
    等差数列 - linespace
    # 1到10 10个元素等差数列
    np.linespace(1,10,10)
    # 包含末尾元素20, 5到20, 5个元素的等差数列
    np.linespace(5,20,5,endpoint=True)
    
    等比数列 - logspace
    # 0到9, 10个元素,以2为基数 
    np.logspace(0,9,10,base=2)
    

    8 切片 | 索引

    # 创建1维数组
    x = np.arange(10)
    # 索引0处元素
    print(x[0])
    # 负索引 倒数第3个
    a[-3]
    # 切片
    # 开始到结尾
    a[:]
    # 索引3开始到结尾
    a[3:]
    # 索引3到4
    a[3:5]
    # 索引1到6,步长为2
    a[1:7:2]
    # 负索引切片
    # 反向获取
    a[::-1]
    # 倒数5到倒数2
    a[-5:-2]
    

    9 二维数组切片索引

    二维数组索引
    # 1-12
    x = np.arange(1,13)
    # 转为4行3列2维数组
    a = x.reshape((4,3))
    print(a)
    # 获取第一行
    print(a[1])
    # 获取第3行第2列
    print(a[2][1])  
    
    二维数组切片
    # [行切片,列切片]
    # 所有行所有列 
    a[:, :]
    # 所有行第2列
    a[:, 1]
    # 所有行第1-2列
    a[:, 0:2]
    # 奇数行所有列
    a[::2, :]
    # 奇数行第1,2列
    a[::2, 0:2]
    # 同时获取第3行第4列和第2行第1列
    a[(2,3), [1,0]]
    # 或者
    np.array[a[1,2],[1,0]]
    # 负索引
    # 最后一行
    a[-1]
    # 行倒序
    a[::-1]
    # 行列倒序
    a[::-1,::-1]
    

    10 数组的复制

    # 1-12 转为3行4列
    a = np.arange(1,13).reshape(3,4)
    # 切片,前2行前2列
    sub_a = a[:2,:2]
    print(sub_a)
    # 修改元素值
    sub_a[0][0] = 100
    print(sub_a)
    # 修改子数组元素会同时影响原数组,浅拷贝
    print(a)
    
    # copy实现深拷贝
    sub_aa = np.copy(a[:2,:2])
    sub_aa[0][0] = 200
    print(sub_aa)
    # 不会影响原数组元素的值
    print(a)
    

    11 改变数组维度

    # 1-24
    a = np.arange(1,25)
    # 修改为2维,参数也可传元组
    b = a.reshape(2,12)
    # 修改为3维
    c = a.reshape((2,3,4))
    # 通过np.reshape修改
    d = np.reshape(a, (2,12))
    # 多维修改为1维,需要计算总元素个数
    e = d.reshape(24)
    # 转为1维
    f = d.reshape(-1)
    # ravel转为1维
    g = b.ravel()
    # flatten转为1维
    h = b.ravel()
    

    12 数组的拼接

    水平拼接和垂直拼接
    a = np.array([1,2,3],[4,5,6])
    b = np.array([11,12,13],[14,15,16])
    # 水平拼接,参数可以为列表或元组
    r = np.hstack([a,b])
    print(r)
    # 垂直拼接
    v = np.vstack([a,b])
    print(v)
    
    不同维度拼接 - concatenate
    # 默认垂直方向axis=0相当与vstack
    # axis=1水平拼接
    r1 = np.concatenate((a,b), axis=1)
    print(r2)
    
    # 三维数组 axis = [0 1 2]
    a = np.arange(1,13).reshape(1,2,6)
    b = np.arange(101,113).reshape(1,2,6)
    
    # 按照不同维度拼接
    r1 = np.concatenate((a,b))
    r2 = np.concatenate((a,b), axis=1)
    r2 = np.concatenate((a,b), axis=2)
    

    13 数组的分割

    x = np.arange(1,9)
    # 1维数组平均分为4份
    a = np.split(x,4)
    # 按照位置分割0,1,2| 3,4 | 5,6,7,8
    b = np.split(x, [3,5])
    
    # 二维数组分割
    a = np.array([1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16])
    # axis=0 垂直方向平均分割
    np.split(a,2,axis=0)
    # 垂直方向 按位置分割
    np.split(a, [2,3], axis=0)
    # 水平方向 平均分割
    np.split(a, 2, axis=1)
    # 水平方向 按位置
    np.split(a, [3], axis=1)
    
    # hsplit 水平分割 按位置分割同上
    np.hsplit(a, 2)
    # vsplit 垂直分割
    np.split(a, 2)
    

    14 数组的转置

    a = np.arange(1,25).reshape(3,8)
    # 数组转置
    b = a.transpose()
    print(b, b.shape)
    
    # 可以使用.T
    print(a.T)
    
    c = np.transpose(a)
    
    # 多维数组转置
    a = a.reshape(2,3,4)
    b = np.transpose(a)
    print(b, b.shape)
    # 转置维3,4,2形状
    c = np.transpose(a, (1,2,0))
    print(c, c.shape)
    

    15 函数

    加减乘除
    a = np.arange(9, dtype=np.float).reshape(3,3)
    b = np.array([10,10,10])
    # 加
    print(np.add(a,b))
    print(a+b)
    # 减
    print(np.substract(b,a))
    print(b-a)
    
    # 乘
    y = np.empty((3,3), dtype=np.int)
    np.multiply(a, 10, out=y)
    
    三角函数
    a = np.array([0,30,60,90])
    print(np.sin(a))
    
    取整

    around 四舍五入
    cell 向下取整
    floor 向下取整

    统计函数

    求和 平均值 对数 幂 方差 标准差等,详见文档

    相关文章

      网友评论

          本文标题:python进阶-03-numpy

          本文链接:https://www.haomeiwen.com/subject/yfeyehtx.html