zoukankan      html  css  js  c++  java
  • Numpy 基础

    Numpy的ndarray:

      基本操作:

    import numpy as np
    >>data=np.array([[ 0.9526, -0.246 , -0.8856],
                        [ 0.5639, 0.2379, 0.9104]]) 
    >>data*10
    array([[ 9.5256, -2.4601, -8.8565],
            [ 5.6385, 2.3794, 9.104 ]])
    >>data+data
     array([[ 1.9051, -0.492 , -1.7713],
     [ 1.1277, 0.4759, 1.8208]])
    #返回各维度大小的元组
    >>data.shape
    (2,3)
    #返回数组数据类型
    >>data.dtype
    dtype('float64')
    #创建ndarray
    >> data1=[6,7.5,8,0,1]
    >> arr1=np.array(data1)
    >>arr1
    array([6.,7.5,8.,0.,1.])
    #创建一个多维数组:
    >>data2=[[1,2,3,4],[5,6,7,8]]
    >>arr2=np.array(data2)
    >>arr2
    array([1,2,3,4],
        [5,6,7,8])
    >>arr2.ndim
    2
    >>arr2.shape
    (2,4)
    #利用zeros和ones分别创建指定长度或形状的全0或全1数组,empty可以创建一个没有任何具体值的数组
    >>np.zeros(10)
    array([0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.])
    >>np.zeros((3, 6))
    array([[ 0., 0., 0., 0., 0., 0.],
        [ 0., 0., 0., 0., 0., 0.],
        [ 0., 0., 0., 0., 0., 0.]])
    >>np.empty((2,3,2))
    array([[[ 4.94065646e-324, 4.94065646e-324],
         [ 3.87491056e-297, 2.46845796e-130],
         [ 4.94065646e-324, 4.94065646e-324]],
        [[ 1.90723115e+083, 5.73293533e-053],
         [ -2.33568637e+124, -6.70608105e-012],
         [ 4.42786966e+160, 1.27100354e+025]]])
    #arange是Python内置函数range的数组版:
    >>np.arange(15)
    array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

      ndarray的数据类型

    #dtype(数据类型)是一个对象,它含有ndarray将一块内存解释为待定数据类型所需的信息
    import numpy as np
    >>arr1=np.array([1,2,3],dtype=np.float64)
    >>arr1.dtype
    dtype('float64')
    >>arr2=np.array([1,2,3],dtype=np.int32)
    >>arr2.dtype
    dtype('int32')
    #通过ndarray的astype方法显式地转换其dtype:
    >>arr=np.array([1,2,3,4,5])
    >>arr.dtype
    dtype('int64')
    >>float_arr=arr.astype(np.float64)
    >>float_arr.dtype
    dtype('float64')
    >>numeric_strings=np.array(['1.25','-9.6','42'],dtype=np.string_)
    >>numeric_strings.astype(float)
    array([1.25,-9.6,42.])

     数组和标量之间的运算:大小相等的数组之间的任何算术运算都会将运算应用到元素级,同样,数组与标量的算术运算也会将那个标量值传播到各个元素

     基本的索引和切片:数组切片是原始数组的视图,这意味着数据不会被复制,视图上的任何修改都会直接反映到源数据上。

              如果想要得到的是ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如arr[5:8].copy()

     布尔型索引:

    import numpy as np
    >>names=np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
    >>data=np.random.randn(7,4)
    >>data[names=='Bob']
    array([[-0.048 , 0.5433, -0.2349, 1.2792],
        [ 2.1452, 0.8799, -0.0523, 0.0672]])
    >>data[names=='Bob',2:]
    array([[-0.2349, 1.2792],
         [-0.0523, 0.0672]])

    花式索引:将数据复制到新数组中

    import numpy as np
    >>arr=np.empty((8,4))
    >>for i in range(8):
        arr[i]=i
    >>arr
    array([[ 0., 0., 0., 0.],
        [ 1., 1., 1., 1.],
        [ 2., 2., 2., 2.],
        [ 3., 3., 3., 3.],
        [ 4., 4., 4., 4.],
        [ 5., 5., 5., 5.],
        [ 6., 6., 6., 6.],
        [ 7., 7., 7., 7.]])
    >>arr[[4,3,0,6]]
    array([[ 4., 4., 4., 4.],
         [ 3., 3., 3., 3.],
         [ 0., 0., 0., 0.],
         [ 6., 6., 6., 6.]])
    >>arr=np.arange(32).reshape((8,4))
    >>arr
    array([[ 0, 1, 2, 3],
        [ 4, 5, 6, 7],
        [ 8, 9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23],
        [24, 25, 26, 27],
        [28, 29, 30, 31]])
    >>arr[[1, 5, 7, 2], [0, 3, 1, 2]]
    array([ 4, 23, 29, 10])
    >>arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
    array([[ 4, 7, 5, 6],
        [20, 23, 21, 22],
        [28, 31, 29, 30],
        [ 8, 11, 9, 10]])

    数组转置和轴对换:

      

    import numpy as np
    >> arr=np.arange(15).reshape((3,5))
    >>arr
    array([[ 0, 1, 2, 3, 4],
        [ 5, 6, 7, 8, 9],
        [10, 11, 12, 13, 14]])
    >>arr.T
     array([[ 0, 5, 10],
        [ 1, 6, 11],
        [ 2, 7, 12],
        [ 3, 8, 13],
        [ 4, 9, 14]])

    通用函数: 快速的元素级数组函数,是一种对ndarray中的数据执行元素级运算的函数

      1. 一元ufunc表:

      2. 二元ufunc表:

    将条件逻辑表述为数组运算:np.where()

    import numpy as np
    >>xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
    >>yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
    >>cond = np.array([True, False, True, True, False])
    >>result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)
    
    ======
    >>result = np.where(cond, xarr, yarr)

    数学和统计方法:

    用于布尔型数组的方法:

      1.在数据运算中布尔值会被强制转换为1(True)和0(False)

      2.sum():统计布尔型数组中的True的个数

      3. Any():用于测试数组中是否存在一个或多个True

      4.All()  :用于检查数组中所有值是否都是True.

    排序:

      sort()方法:

    import numpy as np
    >>arr=np.random.randn(8)
    >>arr
    array([ 0.6903, 0.4678, 0.0968, -0.1349, 0.9879, 0.0185, -1.3147,
              -0.5425])
    >>arr.sort()
    array([-1.3147, -0.5425, -0.1349, 0.0185, 0.0968, 0.4678, 0.6903,
                0.9879])    

    唯一化以及其他的集合逻辑:

     用于数组的文件输入输出:

      1.将数组以二进制格式保存到磁盘:

        np.save()/np.savez() 和np.load()

      2.存取文本文件:

        np.loadtxt()

    线性代数:

      

    随机数生成:

  • 相关阅读:
    Android : iperf-2.0.4 网络测试工具
    Android : SELinux 简析&修改
    Android : 修改内核源码 and 编译、打包成新的boot.img
    Bluedroid: 音频数据的传输流程
    Bluedroid: 蓝牙协议栈源码剖析
    【Java】 剑指offer(54) 二叉搜索树的第k个结点
    【Java】 剑指offer(53-3) 数组中数值和下标相等的元素
    【Java】 剑指offer(53-2) 0到n-1中缺失的数字
    【Java】 剑指offer(53-1) 数字在排序数组中出现的次数
    【Java】 剑指offer(52) 两个链表的第一个公共结点
  • 原文地址:https://www.cnblogs.com/easy-wang/p/6437456.html
Copyright © 2011-2022 走看看