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

    In [1]:
    import numpy as np
    
     

    创建一个数组

    In [2]:
    arry1 = np.array([[1,2,3]
                    ,[4,5,6]])
    
    In [3]:
    farry1
    
    Out[3]:
    array([[1, 2, 3],
           [4, 5, 6]])
     

    查看数组的一些属性(维数等)

    In [4]:
    print('the dimension of arry is',arry1.ndim)
    
     
    the dimension of arry is 2
    
    In [5]:
    print('the shape of arry is',arry1.shape)#显示(行数,列数)
    
     
    the shape of arry is (2, 3)
    
    In [6]:
    print('the size of arry is',arry1.size) #显示有几个元素
    
     
    the size of arry is 6
    
     

    定义array的type

    In [7]:
    arry2 = np.array([1,2,3],dtype=np.int64)#定义为整型
    print(arry2.dtype)
    
     
    int64
    
     

    生成0矩阵

    In [8]:
    arryzero = np.zeros((3,4))#3行4列
    arryzero
    
    Out[8]:
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
     

    生成1矩阵

    In [9]:
    arrayone = np.ones((3,6))
    arrayone
    
    Out[9]:
    array([[1., 1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1., 1.]])
    In [10]:
    print('the default dtype of arryone is',arrayone.dtype)
    
     
    the default dtype of arryone is float64
    
     

    生成空矩阵

    In [11]:
    arrayempty = np.empty((3,6))
    arrayempty
    
    Out[11]:
    array([[1., 1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1., 1.]])
     

    生成有序数组

    In [12]:
    arrayarrange = np.arange(10,20,2)
    
    In [13]:
    arrayarrange
    
    Out[13]:
    array([10, 12, 14, 16, 18])
    In [14]:
    arrayarrange2 = np.arange(12).reshape(3,4)#重新定义其形状
    arrayarrange2
    
    Out[14]:
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
     

    生成一个线段

    In [15]:
    lines = np.linspace(0,9,10)#在0~9之间生成10段,包含终值
    lines
    
    Out[15]:
    array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
    In [16]:
    lines.reshape((2,5))
    
    Out[16]:
    array([[0., 1., 2., 3., 4.],
           [5., 6., 7., 8., 9.]])
     

    numpy的基础运算

     

    设置

    In [17]:
    a = np.arange(10,50,10)
    b = np.arange(4)
    a,b
    
    Out[17]:
    (array([10, 20, 30, 40]), array([0, 1, 2, 3]))
    In [18]:
    c = a-b
    c
    
    Out[18]:
    array([10, 19, 28, 37])
    In [19]:
    c = a+b
    c
    
    Out[19]:
    array([10, 21, 32, 43])
    In [20]:
    c = b**2
    c#每个元素都平方
    
    Out[20]:
    array([0, 1, 4, 9], dtype=int32)
     

    三角函数的运算

    In [21]:
    c = 10*np.sin(a)#a中每一个值都代入sin中再*10
    c
    
    Out[21]:
    array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])
     

    矩阵中的布尔运算

    In [22]:
    print(b<3) #生成布尔列表,看哪个数小于3
    
     
    [ True  True  True False]
    
     

    乘法运算

    In [23]:
    d = np.array([[10,10]
                  ,[10,10]])
    e = np.arange(4).reshape(2,2)
    d,e
    
    Out[23]:
    (array([[10, 10],
            [10, 10]]), array([[0, 1],
            [2, 3]]))
    In [24]:
    f = d*e#逐个相乘
    f
    
    Out[24]:
    array([[ 0, 10],
           [20, 30]])
    In [25]:
    f = np.dot(d,e)#等同于d.dot(e)
    f
    
    Out[25]:
    array([[20, 40],
           [20, 40]])
     

    随机矩阵

    In [26]:
    g = np.random.random((3,2))#生成一个随机的数列,()里面为一个shape
    g
    
    Out[26]:
    array([[0.05466126, 0.31259655],
           [0.14907873, 0.36597221],
           [0.16032719, 0.30097574]])
     

    一些内置函数

     
    数组求和(里面所有数加起来)
    In [27]:
    g = np.sum(f)
    g
    
    Out[27]:
    120
    In [28]:
    g = np.sum(f,axis=0)#每一列加起来 axis=1为每一行加起来的值
    g
    
    Out[28]:
    array([40, 80])
     
    最大值和最小值
    In [29]:
    np.max(f),np.min(f)
    
    Out[29]:
    (40, 20)
    In [30]:
    np.max(f,axis=0)#每一行的最大值
    
    Out[30]:
    array([20, 40])
    In [77]:
    np.max(f,axis=1)#每一列的最大值
    
    Out[77]:
    array([40, 40])
     

    索引

     

    一维

    In [31]:
    A = np.arange(3,15)
    A
    
    Out[31]:
    array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
    In [32]:
    A[3]
    
    Out[32]:
    6
     

    二维

    In [33]:
    A = np.arange(3,15).reshape(3,4)
    A
    
    Out[33]:
    array([[ 3,  4,  5,  6],
           [ 7,  8,  9, 10],
           [11, 12, 13, 14]])
    In [34]:
    A[2]#第三行
    
    Out[34]:
    array([11, 12, 13, 14])
    In [35]:
    A[1][1]#第二行的第二个,等价于A[1,1]
    
    Out[35]:
    8
    In [36]:
    A[2,:]#:代表所有数,这个代表第三行所有数.
    
    Out[36]:
    array([11, 12, 13, 14])
    In [37]:
    A[:,1]# 第二列的所有数
    
    Out[37]:
    array([ 4,  8, 12])
    In [38]:
    A[1,1:]# 第二行,索引值为1~末端的值
    
    Out[38]:
    array([ 8,  9, 10])
     

    有关迭代

    In [39]:
    for row in A:
        print(row)#默认按行迭代
    
     
    [3 4 5 6]
    [ 7  8  9 10]
    [11 12 13 14]
    
    In [40]:
    for column in A.T:#T代表转置矩阵
        print(column)
    
     
    [ 3  7 11]
    [ 4  8 12]
    [ 5  9 13]
    [ 6 10 14]
    
    In [41]:
    for item in A.flat:#.flat把多维数组压成一维的.返回的是一个迭代器
        print(item)
    
     
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    In [42]:
    A.flatten()#返回一个一维数组
    
    Out[42]:
    array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
     

    array的合并

    In [60]:
    A = np.ones((1,3))
    B = np.array([2,2,2])
    A,B
    
    Out[60]:
    (array([[1., 1., 1.]]), array([2, 2, 2]))
     

    上下合并

    In [44]:
    E = np.vstack((A,B,B,B))#vertical stack
    E
    
    Out[44]:
    array([[1., 1., 1.],
           [2., 2., 2.],
           [2., 2., 2.],
           [2., 2., 2.]])
     

    增维操作

    In [45]:
    print(B.T.shape)#没有转置,缺少维度
    
     
    (3,)
    
    In [50]:
    C = B[:,np.newaxis]#在列上增了一维
    print(C,C.shape)
    
     
    [[2]
     [2]
     [2]] (3, 1)
    
    In [62]:
    D = B[np.newaxis,:]#在行上增了一维
    B = D
    print(D,D.shape)
    
     
    [[2 2 2]] (1, 3)
    
    In [63]:
    B
    
    Out[63]:
    array([[2, 2, 2]])
     

    左右合并

    In [64]:
    print(np.hstack((B,A)))#horizontal stack
    
     
    [[2. 2. 2. 1. 1. 1.]]
    
    In [65]:
    C = np.concatenate((A,B,B),axis=0)#可以要求在哪一个维度合并,axis=0 为上下合并
    C
    
    Out[65]:
    array([[1., 1., 1.],
           [2., 2., 2.],
           [2., 2., 2.]])
     

    数列分割

     

    等分割

    In [66]:
    print(np.split(C,3,axis=0)) #(array,split_section,axis=)
    
     
    [array([[1., 1., 1.]]), array([[2., 2., 2.]]), array([[2., 2., 2.]])]
    
     

    不等分割

    In [67]:
    print(np.array_split(C,4,axis=0))
    
     
    [array([[1., 1., 1.]]), array([[2., 2., 2.]]), array([[2., 2., 2.]]), array([], shape=(0, 3), dtype=float64)]
    
    In [68]:
    print(np.vsplit(E,2))
    
     
    [array([[1., 1., 1.],
           [2., 2., 2.]]), array([[2., 2., 2.],
           [2., 2., 2.]])]
    
    In [69]:
    print(np.hsplit(E,3))
    
     
    [array([[1.],
           [2.],
           [2.],
           [2.]]), array([[1.],
           [2.],
           [2.],
           [2.]]), array([[1.],
           [2.],
           [2.],
           [2.]])]
    
     

    copy 和 deep copy

    In [70]:
    a = np.arange(4)
    b = a
    c = a
    d = b
    
    In [71]:
    a[0] = 11
    a
    
    Out[71]:
    array([11,  1,  2,  3])
    In [72]:
    b#都变成11
    
    Out[72]:
    array([11,  1,  2,  3])
    In [73]:
    d
    
    Out[73]:
    array([11,  1,  2,  3])
    In [74]:
    d [1:3] = [22,33]
    d
    
    Out[74]:
    array([11, 22, 33,  3])
    In [ ]:
    a#指针指向的内存地址一样,要变就一起变了
    
    In [75]:
    b = a.copy() #deep copy
    a[3] = 44
    b#最后一个没变44
    
    Out[75]:
    array([11, 22, 33,  3])
    In [76]:
    a
    
    Out[76]:
    array([11, 22, 33, 44])
  • 相关阅读:
    vue echarts 遇到的bug之一 无法渲染的问题
    前端SSR方案调研
    【读书笔记】数据结构与算法js描述-链表实现
    【转发】数组,字符串常用方法
    【转】README.md 语法汇总
    webpack 配置遇到的坑
    原生audio 实现音频播放器功能
    活动抽奖组件设计
    理解vue-loader
    kpi sql 积累
  • 原文地址:https://www.cnblogs.com/negu/p/12484613.html
Copyright © 2011-2022 走看看