zoukankan      html  css  js  c++  java
  • python reshape函数参数-1(X.reshape(X.shape[0], -1).T)

    欢迎关注WX公众号:【程序员管小亮】

    近来在看吴恩达深度学习作业的时候,看到这么一行代码,发现网上说的清楚的文章比较少,特此记录。

    X.reshape(X.shape[0], -1).T
    

    X.reshape(X.shape[0], -1).T可以将一个维度为(a,b,c,d)的矩阵转换为一个维度为(b∗c∗d, a)的矩阵。

    举例子说明一下就清楚是怎么回事了。

    例子1:

    >>> X.shape
    (209, 64, 64, 3)
    

    我们假设x的shape是(209, 64, 64, 3)的。

    >>> X.shape[0]
    209
    

    然后,我们说shape[0]就是第一个列的行数,也就是209。

    >>> X.reshape(X.shape[0], -1)
    (209, 64*64*3)
    

    通过reshape重新建立维度,第一个维度就是X.shape[0],这就是正常的reshape操作;第二个维度是-1,我们知道X的shape属性是多少,是(209, 64, 64, 3),但是想让X变成209行,列数不知道是多少,所以也就是209 * 64 * 64 * 3 / 209,也就是64 * 64 * 3。

    >>> X.reshape(X.shape[0], -1).T
    (64*64*3, 209)
    

    所以A trick when you want to flatten a matrix X of shape (a,b,c,d) to a matrix X_flatten of shape (b ∗∗ c ∗∗ d, a) is to use:

    X.reshape(X.shape[0], -1).T
    

    例子2:

    import numpy as np
    
    z = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8]])
    a = z.shape
    b = z.reshape(-1)
    print("a:",a)
    print("b:",b)
    
    > a: (2, 4)
    > b: [1 2 3 4 5 6 7 8]
    

    正常的shape和reshape。

    import numpy as np
    
    z = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8]])
    c = z.reshape(-1, 1)
    print("c:",c)
    
    > c: [[1]
     	  [2]
     	  [3]
    	  [4]
    	  [5]
    	  [6]
    	  [7]
    	  [8]]
    

    先前我们不知道z的shape属性是多少,但是想让z变成只有一列,行数不知道多少,通过z.reshape(-1,1),Numpy自动计算出有8行,新的数组shape属性为(8, 1),与原来的(2, 4)配套。

    import numpy as np
    
    z = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8]])
    d = z.reshape(-1, 2)
    print("d:",d)
    
    > d: [[1 2]
    	  [3 4]
    	  [5 6]
    	  [7 8]]
    

    和上面一样,newshape等于-1,列数等于2,行数未知,通过z.reshape(-1,2),新的数组shape属性为(4, 2)。

    总结一下,参数-1就是不知道行数或者列数多少的情况下使用的参数,所以先确定除了参数-1之外的其他参数,然后通过(总参数的计算) / (确定除了参数-1之外的其他参数) = 该位置应该是多少的参数。

    python课程推荐。
    在这里插入图片描述

  • 相关阅读:
    How to Setup a Private Proxy Server on EC2 in Under 10 Minutes
    How to Create a Cron Job (Scheduled Task) for Your Website or Blog
    NPM, BOWER, GIT, AND BASH PROXY CONFIGURATIONS
    Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本
    Proguard breaking audio file in assets or raw
    SOCKSify Ruby
    UNIX / Linux: 2 Ways to Add Swap Space Using dd, mkswap and swapon
    窗体之间传值的方法
    扩展方法,
    反射 type 的基本用法,动态加载插件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302844.html
Copyright © 2011-2022 走看看