zoukankan      html  css  js  c++  java
  • numpy基础一

    常用,常忘

    1.随机矩阵

    np.random.rand(4,3)
    array([[ 0.06679473,  0.71073515,  0.5694172 ],
           [ 0.95018143,  0.60161401,  0.8076899 ],
           [ 0.40341822,  0.72154255,  0.92283012],
           [ 0.81143322,  0.87853742,  0.38013707]])
    
    np.random.randint(0,10,(4,3))
    array([[1, 9, 5],
           [6, 1, 1],
           [8, 2, 0],
           [3, 4, 3]])
    

    numpy概览

    import numpy as np
    
    array=np.array([1,2,3,4])
    array.shape
    (4,)
    
    array2=np.array([[1,2,3,4],[2,3,4,1]])
    array2.shape
    (2, 4)
    
    array3=np.array([[1,2,3,4],[2,3,4,1]])
    type(array3)
    numpy.ndarray
    

    np.array的结构

    1. dtype  数据类型
    2. itemsize 占了多少字节
    3. shape  形状
    4. size  数据个数
    5. ndim  维度
    6. fill填充
    7. 索引和切片
    
    
    * 要求array里面的数据是同一种类型,如果不是,numpy会转为一种
    * int<float<String(取值类型顺序)
    
    
    import numpy as np
    array1=np.array([1,2,3,4])
    array1.dtype
    # >>>  dtype('int32')
    
    
    array2=np.array([1,2,3,4.5])
    array2.dtype
    #>>>  dtype('float64')
    
    array3=np.array([1,'2',3,4.5])
    array3.dtype
    #>>>dtype('<U11') 
    
    
    weidu=np.array([[1,2,3],[1,3,2],[4,2,1]])
    print(weidu.dtype)
    print(weidu.itemsize)
    print(weidu.shape)
    print(weidu.size)
    print(weidu.ndim)
    
    #>>> nt32
    #>>> 4
    #>>> (3, 3)
    #>>> 9
    #>>> 2
    
    
    weidu2=np.array([[1,2,3],[1,3,2],[4,2,1]])
    weidu2.fill(0)
    print(weidu2)
    
    # >>>
    [[0 0 0]
     [0 0 0]
     [0 0 0]]
    
    

    矩阵格式(多维的形式)

    1. 多维度的取值方式和list不同
    2. nb.array.copy 深度复制
    3. arange(0,100,10) 0到100 , 差值10构造等差数组
    4. 布尔数组作为索引取值
    5. 随机值random.rand(10) 0到1制作10个随机数 生成np数组
    weidu3=np.array([[1,2,3],[1,3,2],[4,2,1]])
    print(weidu3[1,1])
    print(weidu[:,1]) #每一行的第二个数
    print(weidu[:,0:2]) #每一行的第一和第二个数
    weidu[:,0:2][0,1]
    
    #>>>
    3
    [2 3 2]
    [[1 2]
     [1 3]
     [4 2]]
    2
    
    
    
    one=np.array([[1,2],[3,4]])
    oneCopy=one.copy()
    oneCopy[0,1]=100
    print(one)
    print(oneCopy)
    
    
    
    #>>>
    [[1 2]
     [3 4]]
    [[  1 100]
     [  3   4]]
    
    
    
    pan_array=np.array([1,2,3,4,5,6],dtype=np.float32)
    print(pan_array)
    print(pan_array.dtype)
    print(pan_array.nbytes) # 32位 四个字节 * 6 =24B
    
    #>>>
    [1. 2. 3. 4. 5. 6.]
    float32
    24
    
    

    布尔数组作为索引取值

    
    indexs=np.array([0,1,0,2,0,1,0],dtype=bool)
    print(indexs)
    numbers=np.array([10,20,30,4,5,7,8])
    result=numbers[indexs]  #在索引为true的地方取值
    print(result)
    
    #>>>>
    [False  True False  True False  True False]
    [20  4  7]
    
    

    随机数转化为布尔值

    random_array=np.random.rand(10)
    print(random_array)
    boolarray=random_array>0.5
    print(boolarray)
    
    #>>>
    [0.18501146 0.03588    0.04643065 0.88957392 0.15500452 0.49480942
     0.28144087 0.83287192 0.72878256 0.66462199]
    [False False False  True False False False  True  True  True]
    
    

    按条件找到索引

    array_index=np.array([1,2,3,4,5,6,8,2,1,3,11,6,8,12])
    result=np.where(array_index > 8)
    print(result)
    print(array_index[np.where(array_index > 8)])
    
    #>>>
    (array([10, 13], dtype=int64),)
    [11 12]
    
    
    
    

    np.asarray 重新给np.array指定数值类型---深度copy

    pan_int32=np.array([1,2,3],dtype=np.int32)
    pan_float32=np.asarray(pan_int32,dtype=np.float32)
    print(pan_float32)
    print(pan_int32)
    

    np.array的数值计算

    1. sum 求和
    2. prod 求积
    3. min 最小值
    4. max 最大值
    5. argmin最小值的索引
    6. argmax最大值的索引
    7. mean求平均值
    8. std 标准差
    9. var 方差
    10. clip 限定边界值
    11. round
    12. 轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。
    import numpy as np
    
    pan_array=np.array([[1,2,3],[1,2,3]])
    print(pan_array)
    print(pan_array.ndim)
    
    

    sum

    np.sum(pan_array)
    #>>> 12
    

    指定操作沿着什么轴进行

    np.sum(pan_array,axis=0)
    #>>> array([2, 4, 6])
    
    np.sum(pan_array,axis=1)
    #>>> array([6, 6])
    
    

    -1指定最后一个维度

    np.sum(pan_array,axis=-1)
    #>>>
    array([6, 6])
    
    

    prod 求积

    array_prod=np.array([[1,2,3,4],[2,2,3,5]])
    array_prod.prod()
    #>>> 
    1440
    
    array_prod.prod(axis=0)
    #>>>
    array([ 2,  4,  9, 20])
    
    array_prod.prod(axis=1)
    #>>>
    array([24, 60])
    
    array_prod.prod(axis=-1)
    #>>>
    array([24, 60])
    
    

    min最小值

    array_min=np.array([[1,22,3,5],[1,12,6,7]])
    array_min.min()
    #>>>
    1
    
    array_min.min(axis=0)
    #>>>
    array([ 1, 12,  3,  5])
    
    array([ 1, 12,  3,  5])
    #>>>
    array([1, 1])
    

    max最大值

    array_max=np.array([[1,2,3,4,5],[5,4,3,2,1]])
    array_max.max()
    #>>>
    5
    
    array_max.max(axis=0)
    #>>>
    array([5, 4, 3, 4, 5])
    
    array_max.max(axis=1)
    #>>>
    array([5, 5])
    

    argmin最小值索引

    argmin=np.array([[1,2,3],[2,1,4]])
    argmin.argmin()
    #>>>
    0
    
    argmin.argmin(axis=0)
    #>>>
    array([0, 1, 0], dtype=int64)
    
    argmin.argmin(axis=1)
    #>>>
    array([0, 1], dtype=int64)
    
    

    argmax

    argmax=np.array([[12,5,77,1],[2,3,4,6]])
    
    argmax.argmax()
    #>>>
    2
    
    argmax.argmax(axis=0)
    #>>>
    array([0, 0, 0, 1], dtype=int64)
    
    argmax.argmax(axis=1)
    #>>>
    array([2, 3], dtype=int64)
    
    

    mean 平均值

    array_mean=np.array([[1,2,3,4],[2,3,4,5]])
    
    array_mean.mean()
    #>>>
    3.0
    
    array_mean.mean(axis=0)
    #>>>
    array([1.5, 2.5, 3.5, 4.5])
    
    array_mean.mean(axis=1)
    #>>>
    array([2.5, 3.5])
    
    

    std 标准差

    array_std=np.array([[1,2,3,4],[2,3,4,5]])
    
    array_std.std()
    #>>>
    1.224744871391589
    
    array_std.std(axis=0)
    #>>>
    array([0.5, 0.5, 0.5, 0.5])
    
    array_std.std(axis=-1)
    #>>>
    array([1.11803399, 1.11803399])
    
    

    var 方差

    array_var=np.array([[1,2,3],[2,3,4]])
    
    array_var.var()
    #>>>
    0.9166666666666666
    
    array_var.var(axis=0)
    #>>>
    array([0.25, 0.25, 0.25])
    
    array_var.var(axis=1)
    #>>>
    array([0.66666667, 0.66666667])
    

    clip 边界限定 (超过边界,就按边界取值)

    
    array_clip=np.array([[1,2,3,4],[2,3,4,5]])
    array_clip=np.array([[1,2,3,4],[2,3,4,5]])
    
    array_clip.clip(2,4)
    #>>>
    array([[2, 2, 3, 4],
           [2, 3, 4, 4]])
    
    

    round四舍五入

    array_round=np.array([[1.111,2.222,3.333,4.444],[2.111,3.222,4.333,5.444]])
    
    array_round.round(decimals=1)
    #>>>>
    array([[1.1, 2.2, 3.3, 4.4],
           [2.1, 3.2, 4.3, 5.4]])
    
    array_round.round(decimals=2)
    #>>>
    array([[1.11, 2.22, 3.33, 4.44],
           [2.11, 3.22, 4.33, 5.44]])
    
    

    numpy 排序

    1. sort 升序排序
    2. argsort 排序后的位置
    3. linspace 等差出列造数据
    4. searchsorted 插入序列,返回位置
    5. lexsort 多维度排序
    import numpy as np
    

    sort

    array_sort=np.array([5,1,2,3,4,5])
    array_sort.sort()
    print(array_soprt)
    #>>>
    [1 2 3 4 5 5]
    

    argsort

    array_argsort=np.array([1,5,2,1,3,24,2,6,5])
    array_argsort.argsort()
    #>>>
    array([0, 3, 2, 6, 4, 1, 8, 7, 5], dtype=int64)
    

    lispace

    array_linspace=np.linspace(1,10,10)
    print(array_linspace)
    
    #>>>
    [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
    
    

    searchsorted 查看值的位置

    array_linspace=np.linspace(1,10,10)
    value=np.array([1,3,4,6])
    np.searchsorted(array_linspace,value)
    # >>>
    array([0, 2, 3, 5], dtype=int64)
    
    
    print(array_linspace)
    print(value)
    [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
    [1 3 4 6]
    
    

    lexsort

    one=np.array([6,2,4,1,2,3,4,5,6])
    two=np.array([1,2,3,4,5,5,6,7,8])
    
    result=np.lexsort([two,one])
    result
    array([3, 1, 4, 5, 2, 6, 7, 0, 8], dtype=int64)
    

    数组形状

    1. arange(i) 生成0到i的序列,不包括i
    2. shape 维度/形状
    3. reshape 重新设置形状
    4. newaxis 新的维度
    5. squeeze 去掉空维度
    6. transpose/T 变化形状
    7. concatenate 矩阵链接
    8. vstack 垂直合并
    9. hstack 水平合并
    10. flatten
    11. ravel

    arange

    array_arange=np.arange(10)
    print(array_arange)
    #>>>
    [0 1 2 3 4 5 6 7 8 9]
    
    

    shape

    array_shape=np.arange(10)
    array_shape.shape
    
    #>>>
    (10,)
    

    reshape

    array_reshape=np.arange(10)
    array_reshape.reshape(1,10)  #大小必须不能改变 10个元素,变化后还是10个
    #>>>
    array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
    

    数组的形状

    1. arange(i) 生成0到i的序列,不包括i
    2. shape 维度/形状
    3. reshape 重新设置形状
    4. newaxis 新的维度
    5. squeeze 去掉空维度
    6. transpose/T 变化形状
    7. concatenate 矩阵链接
    8. vstack 垂直合并
    9. hstack 水平合并
    10. flatten
    11. ravel

    arange

    array_aange=np.arange(10)
    
    #>>>
    [0 1 2 3 4 5 6 7 8 9]
    
    

    shape

    array_shape=np.arange(10)
    array_shape.shape
    
    #>>>
    (10,)
    

    reshape

    array_reshape=np.arange(10)
    array_reshape.reshape(1,10) #大小必须不能改变 10个元素,变化后还是10个
    
    #>>>
    array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
    

    newaxis

    array_newaxis=np.arange(10)
    array_newaxis=array_newaxis[np.newaxis,:]
    print(array_newaxis)
    print(array_newaxis.shape)
    
    
    # >>>
    [[0 1 2 3 4 5 6 7 8 9]]
    (1, 10)
    
    
    array_newaxis=np.arange(10)
    array_newaxis=array_newaxis[:,np.newaxis]
    print(array_newaxis)
    print(array_newaxis.shape)
    
    #>>>
    [[0]
     [1]
     [2]
     [3]
     [4]
     [5]
     [6]
     [7]
     [8]
     [9]]
    (10, 1)
    

    squeeze

    array_newaxis=np.arange(10)
    array_newaxis=array_newaxis[:,np.newaxis,np.newaxis]
    print(array_newaxis)
    print(array_newaxis.shape)
    #>>>
    [[[0]]
     [[1]]
     [[2]]
     [[3]]
     [[4]]
     [[5]]
     [[6]]
     [[7]]
     [[8]]
     [[9]]]
    (10, 1, 1)
    
    
    array_squeeze=array_newaxis.squeeze()
    print(array_squeeze)
    
    #>>>
    [0 1 2 3 4 5 6 7 8 9]
    

    transpose 形状转换

    array_transpose=np.array([[1,2,3,4,5],[2,3,4,5,6]])
    array_transpose.transpose()
    
    #>>>
    array([[1, 2],
           [2, 3],
           [3, 4],
           [4, 5],
           [5, 6]])
    
    

    concatenate数组链接

    a=np.array([[1,2,3,4,5],[5,4,3,2,1]])
    b=np.array([[0,9,8,7,6],[6,7,8,9,0]])
    
    array_concatenate=np.concatenate((a,b))
    print(array_concatenate)
    #>>>
    [[1 2 3 4 5]
     [5 4 3 2 1]
     [0 9 8 7 6]
     [6 7 8 9 0]]
    
    
    array_concatnate_axis=np.concatenate((a,b),axis=1)
    print(array_concatnate_axis)
    #>>>
    [[1 2 3 4 5 0 9 8 7 6]
     [5 4 3 2 1 6 7 8 9 0]]
    array_concatnate_axis.shape
    #>>>
    (2, 10)
    

    vstack 垂直合并

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

    hstack 水平合并

    np.hstack((a,b)) 水平合并
    #>>>
    array([[1, 2, 3, 4, 5, 0, 9, 8, 7, 6],
           [5, 4, 3, 2, 1, 6, 7, 8, 9, 0]])
    

    flatten 合并成一行

    array_flatten=np.array([[1,2,3,4],[4,5,6,7]])
    array_flatten.flatten()
    #>>>
    array([1, 2, 3, 4, 4, 5, 6, 7])
    

    revel合并成一行

    array_ravel=np.array([[1,2,3,4],[4,5,6,7]])
    array_ravel.ravel()
    #>>>
    array([1, 2, 3, 4, 4, 5, 6, 7])
    
    

    数组的生成

    1. arange
    2. linspace
    3. logspace
    4. meshgrid
    5. r_
    6. c_
    7. zeros
    8. ones
    9. empty
    10. fill
    11. zeros_like
    12. ones_likes
    13. identity 基准矩阵

    range

    array_arange=np.arange(10)
    print(array_arange)
    array_arang_b=np.arange(1,10,2)
    print(array_arang_b)
    array_arange_c=np.arange(1,10,5,dtype=np.float32)
    
    #>>>
    [0 1 2 3 4 5 6 7 8 9]
    [1 3 5 7 9]
    
    

    linspace

    array_linspace=np.linspace(1,10) ##默认等差数列个数为 50。
    print(array_linspace)
    array_linpsace_a=np.linspace(1,10,2)
    
    #>>>
     [1.          1.18367347  1.36734694  1.55102041  1.73469388  1.91836735
      2.10204082  2.28571429  2.46938776  2.65306122  2.83673469  3.02040816
      3.20408163  3.3877551   3.57142857  3.75510204  3.93877551  4.12244898
      4.30612245  4.48979592  4.67346939  4.85714286  5.04081633  5.2244898
      5.40816327  5.59183673  5.7755102   5.95918367  6.14285714  6.32653061
      6.51020408  6.69387755  6.87755102  7.06122449  7.24489796  7.42857143
      7.6122449   7.79591837  7.97959184  8.16326531  8.34693878  8.53061224
      8.71428571  8.89795918  9.08163265  9.26530612  9.44897959  9.63265306
      9.81632653 10.        ]
    

    logspace

    np.logspace(0,1,5)  # 10的0次幂到10的1次幂  5个等比列数据
    #>>>
    array([ 1.        ,  1.77827941,  3.16227766,  5.62341325, 10.        ])
    
    

    meshgrid

    x=np.linspace(-10,10,5)
    print(x)
    y=np.linspace(-20,20,5)
    print(y)
    #>>>
    [-10.  -5.   0.   5.  10.]
    [-20. -10.   0.  10.  20.]
    
    x1,y1=np.meshgrid(x,y)
    print(x1)
    print(y1)
    
    #>>>
    [[-10.  -5.   0.   5.  10.]
     [-10.  -5.   0.   5.  10.]
     [-10.  -5.   0.   5.  10.]
     [-10.  -5.   0.   5.  10.]
     [-10.  -5.   0.   5.  10.]]
    
    [[-20. -20. -20. -20. -20.]
     [-10. -10. -10. -10. -10.]
     [  0.   0.   0.   0.   0.]
     [ 10.  10.  10.  10.  10.]
     [ 20.  20.  20.  20.  20.]]
    

    r_ row 行向量

    np.r_[0:10:1]
    #>>>
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    

    c_ col 列向量

    np.c_[0:10:1]
    
    #>>>
    array([[0],
           [1],
           [2],
           [3],
           [4],
           [5],
           [6],
           [7],
           [8],
           [9]])
    

    zeros填充0

    np.zeros(5)
    array([0., 0., 0., 0., 0.])
    
    np.zeros((5,5))
    array([[0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.]])
    

    ones填充1

    np.ones(5)
    
    #>>>
    array([1., 1., 1., 1., 1.])
    
    np.ones((5,5))
    
    array([[1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.]])
    
    

    empty空地址

    np.empty(5)
    np.empty((5,5))
    
    

    fill 自定义填充

    a=np.empty((5,5))
    a.fill(3)
    print(a)
    #>>>
    [[3. 3. 3. 3. 3.]
     [3. 3. 3. 3. 3.]
     [3. 3. 3. 3. 3.]
     [3. 3. 3. 3. 3.]
     [3. 3. 3. 3. 3.]]
    

    zeros_like ones_like

    temp=np.arange(0,10,2)
    print(temp)
    #>>>
    [0 2 4 6 8]
    
    result=np.zeros_like(temp)
    print(result)
    #>>>
    [0 0 0 0 0]
    
    result_ones=np.ones_like(temp)
    print(result_ones)
    #>>>
    [1 1 1 1 1]
    

    identity 对角矩阵

    np.identity(5)
    #>>>
    
    array([[1., 0., 0., 0., 0.],
           [0., 1., 0., 0., 0.],
           [0., 0., 1., 0., 0.],
           [0., 0., 0., 1., 0.],
           [0., 0., 0., 0., 1.]])
    
  • 相关阅读:
    Windows创建和使用IP安全策略(IPSec)
    SPOJ LCS2(Longest Common Substring II-后缀自动机向父亲更新)
    poj1125 Floyd算法
    Unity-动态显示窗口制作思路
    Unity-UI架构优化小技巧
    Unity脚本启动顺序调整方法
    Unix/Linux编程实践教程阅读笔记-终端注销代码-来自第二章P54-P57的笔记
    Unix/Linux编程实践教程阅读笔记-who指令实现的优化-来自第二章P48-P54的笔记
    Unix/Linux编程实践教程阅读笔记-who指令的实现(Mac下的实现)-来自第二章P25-P44的笔记
    Unity定制脚本模版--自动添加头部注释
  • 原文地址:https://www.cnblogs.com/panfengde/p/10078084.html
Copyright © 2011-2022 走看看