zoukankan      html  css  js  c++  java
  • numpy用法归纳

    1.生成数组

    import numpy as np

    把python列表转换为数组

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

    array([1, 2, 3])

    把python的range对象转换为数组

    >>> range(5)

    range(0, 5)

    生成等差数组

    >>> np.linspace(0, 10, 5)

    array([  0. ,   2.5,   5. ,   7.5,  10. ])

    对数数组

    >>> np.logspace(0, 10, 2)

    array([  1.00000000e+00,   1.00000000e+10])

    全0数组

    >>> np.zeros((3, 3))

    array([[ 0.,  0.,  0.],

           [ 0.,  0.,  0.],

           [ 0.,  0.,  0.]])

    全1数组

    >>> np.ones((2, 2))

    array([[ 1.,  1.],

           [ 1.,  1.]])

    单位矩阵

    >>> np.identity(2)

    array([[ 1.,  0.],

           [ 0.,  1.]])

    空数组,只申请空间而不初始化,元素值不确定

    >>> np.empty((2, 2))

    array([[ 1.,  1.],

           [ 1.,  1.]])

     

    2.数组与数值的算术运算

    数组可以直接与数值进行加减乘除运算,对应的是数组里每个元素与数值进相应的运算

    3.数组与数组的算术运算

    数组与数组相乘

    >>> a = np.array([1, 2, 3])

    >>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))

    >>> a*b

    array([[ 1,  4,  9],

           [ 4, 10, 18],

           [ 7, 16, 27]])

    一维数组与二维数组的运算,相当于把一维数组的维度看作一个整体向量与二维数组的第一维度中每个对应向量进行运算,并且运算的是针对两个向量中的对应每个元素进行运算,注意这两个运算的向量的维度需要相同

    数组与数组的加减除运算规律如上相同

    4.二维数组转置

    >>> b

    array([[1, 2, 3],

           [4, 5, 6],

           [7, 8, 9]])

    >>> b.T

    array([[1, 4, 7],

           [2, 5, 8],

           [3, 6, 9]])

    注意一维数组转置后和原理是一样的

    5.向量内积

    >>> a = np.array(([1, 2], [3, 4]))

    >>> b = np.array(([5, 6], [7, 8]))

    >>> a.dot(b)

    array([[19, 22],

           [43, 50]])

    6.数组元素访问

    创建等差数组

    >>> arr = np.arange(0, 100, 10, dtype=np.floating)

    >>> arr

    array([  0.,  10.,  20.,  30.,  40.,  50.,  60.,  70.,  80.,  90.])

    生成5个随机整数作为下标

    >>> index = np.random.randint(0, len(arr), 5)

    >>> index

    array([5, 4, 2, 2, 8])

    同时访问多个元素的值

    >>> arr[index]

    array([ 50.,  40.,  20.,  20.,  80.])

    同时修改多个下标指定的元素值

    >>> arr[index] = [1, 2, 3, 4, 5]

    >>> arr

    array([  0.,  10.,   4.,  30.,   2.,   1.,  60.,  70.,   5.,  90.])

    7.对数组进行函数运算

    np.sin(arr)

    np.cos(arr)

    np.round(_) # 四舍五入

    np.floor(arr) # 所有元素向下取整

    np.ceil(arr) # 所有元素向上取整

    8.对矩阵不同维度上的元素进行计算

    np.sum(arr, axis=0) # 二维数组纵向求和

    np.mean(arr, axis=1) # 二维数组横向计算算术平均值

    np.average(arr, axis=0, weights=weight) #二维数组纵向计算加权平均值

    np.max(arr, axis=0) #  二维数组每列最大

    np.std(arr, axis=1)  # 每行元素的标准差

    np.var(arr, axis=0) # 每列元素的标准差

    np.sort(arr, axis=0) # 纵向排序

    9.改变数组大小

    >>> a

    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

    >>> a.shape = 2, 5

    >>> a

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

           [ 6,  7,  8,  9, 10]])

    >>> a.shape = 5, -1

    >>> a

    array([[ 1,  2],

           [ 3,  4],

           [ 5,  6],

           [ 7,  8],

           [ 9, 10]])

    >>> b = a.reshape(2, -1)

    >>> b

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

           [ 6,  7,  8,  9, 10]])

    10.切片操作

    >>> b

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

           [ 6,  7,  8,  9, 10]])

    >>> b[1][::2]

    array([ 6,  8, 10])

    其他切片方式与列表切片相似

    11.布尔运算

    >>> b

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

           [ 6,  7,  8,  9, 10]])

    >>> b > 5

    array([[False, False, False, False, False],

           [ True,  True,  True,  True,  True]], dtype=bool)

    >>> a = np.random.rand(5)

    >>> b = np.random.rand(5)

    >>> a

    array([ 0.35153042,  0.7211572 ,  0.01421697,  0.80853614,  0.00126357])

    >>> b

    array([ 0.54159521,  0.14100028,  0.24689119,  0.40688594,  0.60708272])

    >>> a > b

    array([False,  True, False,  True, False], dtype=bool)

    12.广播

    >>> a = np.arange(0, 100, 20).reshape(-1, 1)

    >>> a

    array([[ 0],

           [20],

           [40],

           [60],

           [80]])

    >>> b = np.arange(0, 5)

    >>> b

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

    >>> a + b

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

           [20, 21, 22, 23, 24],

           [40, 41, 42, 43, 44],

           [60, 61, 62, 63, 64],

           [80, 81, 82, 83, 84]])

    >>> a*b

    array([[  0,   0,   0,   0,   0],

           [  0,  20,  40,  60,  80],

           [  0,  40,  80, 120, 160],

           [  0,  60, 120, 180, 240],

           [  0,  80, 160, 240, 320]])

    13.分段函数

    >>> b

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

    >>> np.where(b > 1)

    (array([2, 3, 4], dtype=int64),)

    >>> np.where(b > 1, 0, 1)

    array([1, 1, 0, 0, 0])

    小于2的元素乘以2的幂次方,大于等于3的元素乘以2+2,没有选择到的元素为返回0

    >>> np.piecewise(b, [b < 2, b >=3], [lambda x:x ** 2, lambda x: x*2 + 2])

    array([ 0,  1,  0,  8, 10])

    14.计算唯一值以及出现次数

    >>> a

    array([3, 5, 0, 5, 7, 8, 9, 6, 6, 9])

    统计出现的次数

    >>> np.bincount(a)

    array([1, 0, 0, 1, 0, 2, 2, 1, 1, 2], dtype=int64)

    返回唯一值,消去重复

    >>> np.unique(a)

    array([0, 3, 5, 6, 7, 8, 9])

    15.矩阵运算

    >>> a = np.random.random((2, 2))*100 % 10

    >>> a

    array([[ 7.14583047,  4.97659447],

           [ 4.54034887,  4.28307445]])

    >>> mat = np.matrix(a)

    >>> mat

    matrix([[ 7.14583047,  4.97659447],

            [ 4.54034887,  4.28307445]])

    >>> mat.sum()

    20.945848263382267

    >>> mat.max()

    7.1458304748163357

    >>> mat.shape

    (2, 2)

    >>> mat.size

    4

    >>> mat.mean()

    5.2364620658455667

    >>> mat.argsort(axis=0)

    matrix([[1, 1],

            [0, 0]], dtype=int64)

    >>> mat.argsort(axis=1)

    matrix([[1, 0],

            [1, 0]], dtype=int64)

    >>> mat.diagonal()

    matrix([[ 7.14583047,  4.28307445]])

  • 相关阅读:
    easyui 分页 MVC
    c#实现万年历示例分享 万年历农历查询
    GroupBy 带条件分组求和
    easyui_tree 复选框 动态加载树
    C#测试运行时间
    MVC 关于easyui-datebox 赋值问题
    MVC 上传 下载
    WindowsService 安装 cmd
    笔记 .Net反射机制
    C# 测试服务器连接 Ping
  • 原文地址:https://www.cnblogs.com/lbliang/p/8589600.html
Copyright © 2011-2022 走看看