logo
Loading...

ncols = nrows // 2的意思? plt.subplot(nrows, ncols, i+1)這邊 i 為何要 + 1? - Cupoy

您好,想請問(1) ncols = nrows // 2的意思為何 ? 為何要向下取整數 ?(2) ...

ml100-2,ncols = nrows // 2,語法,ml100-2-d14

ncols = nrows // 2的意思? plt.subplot(nrows, ncols, i+1)這邊 i 為何要 + 1?

2019/05/04 下午 11:45
機器學習共學討論版
陳泓名
觀看數:23
回答數:3
收藏數:1
ml100-2
ncols = nrows // 2
語法
ml100-2-d14

您好,想請問

(1) ncols = nrows // 2的意思為何 ? 為何要向下取整數 ?

(2) plt.subplot(nrows, ncols, i+1)這邊 i 為何要 + 1 ?

回答列表

  • 2019/05/05 上午 03:00
    劉珍銘
    贊同數:3
    不贊同數:0
    留言數:2

    1. 這邊向下取整數可能錯了,應該要無條件進位才對 ncols = math.ceil( nrows / 2 )

    2. 參考上圖,第三個參數是從 1 開始,HW 裡的 for 迴圈是指定 range(num)

    index 會從 0 開始,所以要 i + 1 才符合 plt.subplot 參數帶入的形式

  • 2019/05/05 下午 04:33
    張維元 (WeiYuan)
    贊同數:0
    不贊同數:1
    留言數:1

    (1) ncols = nrows // 2的意思為何 ? 為何要向下取整數 ?


    => 這邊應該只是要讓圖不要一直往下畫,可以分到往右畫,subplot 具體用法可以看樓上的。至於為什麼是 // 2 應該沒有什麼意思,你要取 // 4 也可以。 

  • 2019/05/06 下午 04:01
    張小馬
    贊同數:2
    不贊同數:0
    留言數:2

    我剛好也做到這天,我認為教材的答案內容很不嚴謹。

    依照填圖片的順序,如一樓回覆,先把一列從左至右填滿,再往第二列從左至右填滿的這個狀況下。我們應該先設計【ncols】,而不是先設計【nrows】。換句話說,我們應該先決定要讓圖片用幾個欄位的長相去出現,再決定依照我設計的幾個欄位,需要保留幾個列位給所有的圖片。

    因此這段我的寫法是:


    # 先設計ncols才對,不管圖片有幾張,反正就是以2欄的方式呈現

    # 這邊要2要3要多少,自己再依照版面去調整就好

    ncols = 2

    # 既然圖片已經被我拆成了2欄,那只需要【圖片總數/2】的列位就夠了

    # 擔心剛好不能被2整除,所以要無條件進入,這樣的列位數才夠。

    # 例如若你設計 ncols = 3,那你需要ceil(4/3)=2個列位(總共2*3=6個位置)才能裝得下4張圖片。

    nrows = math.ceil( len(data) / ncols)


    作業至今發現教材答案很常有這問題,除了沒有說清楚參數的目的,甚至也沒有提為什麼要這樣設計。依照這題只有4個圖片的狀況下,教材答案卻訂了8個位置出來,坦白說,真的很令人困惑。