美文网首页我爱编程程序员
NumPy(2)reshape,dot,flat

NumPy(2)reshape,dot,flat

作者: 加勒比海鲜王 | 来源:发表于2017-06-05 19:48 被阅读0次

    保留初心,砥砺前行

    NumPy官方网站

    NumPy Tutorial

    • reshape函数:

    顾名思义,将原有的数组重新整形,变成参数中指定的形状。

    import numpy as np
    a = np.arange(1, 20, 2)
    print a.reshape(2, 5)
    print a.reshape(2, 1, 5)
    
    [[ 1  3  5  7  9]
     [11 13 15 17 19]]
    
    [[[ 1  3  5  7  9]]
     [[11 13 15 17 19]]]
    

    如下代码所示,在reshape成三维数组时,第一个参数m控制将所有数据划分为m部分,第二个参数n控制将每一块数据分别划分为n部分,最后一个参数x,表示每一个小块有x列。

    import numpy as np
    a = np.arange(1, 21)
    print a.reshape(2, 2, 5)
    
    [[[ 1  2  3  4  5]
      [ 6  7  8  9 10]]
    
     [[11 12 13 14 15]
      [16 17 18 19 20]]]
    

    tip:在终端输出数据时,有时数据会很长,NumPy会自动将数据的中间部分变成省略号显示。如下:

    [[   0    1    2 ...,   97   98   99]
     [ 100  101  102 ...,  197  198  199]
     [ 200  201  202 ...,  297  298  299]
     ...,
     [9700 9701 9702 ..., 9797 9798 9799]
     [9800 9801 9802 ..., 9897 9898 9899]
     [9900 9901 9902 ..., 9997 9998 9999]]
    

    为了显示出全部数据,可以添加如下代码:

     np.set_printoptions(threshold='nan')
    
    • dot函数:

    数组间存在简单的加减乘法,对于乘法,我们都知道矩阵的乘法并不是普通的对应相乘,而使用*符号产生的是对应位置相乘的结果。如果想得到矩阵相乘的结果,需要使用dot函数,如下代码所示:

    import numpy as np
    a = np.array([[1, 2], [2, 3]])
    b = np.array([[2, 2], [3, 3]])
    print a * b
    [[2 4]
     [6 9]]
    print np.dot(a, b)
    [[ 8  8]
     [13 13]]
    
    • flat

    在遍历一维数组时,直接使用下边索引可以一次性遍历,然而当维数增加,遍历下标其实遍历的是某一维度上的数组。例如三维数组,无法直接遍历到每一个元素。如果想直接遍历到每一个元素,可以使用flat(可以理解为要使用到数组中每一个“公寓(flat)中的元素”),如下所示:

    import numpy as np
    b = np.array([[[2, 2], [3, 3]], [[2, 2], [3, 3]]])
    for _ in b:
        print _
    [[2 2]
     [3 3]]
    [[2 2]
     [3 3]]
    for _ in b.flat:
        print _
    2
    2
    3
    3
    2
    2
    3
    3
    

    相关链接:NumPy(1)简介,基础属性,数组创建(ones,zeros,empty,arange,linespace)
    相关链接:NumPy(3)full,eye,empty,random

    相关文章

      网友评论

        本文标题:NumPy(2)reshape,dot,flat

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