亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Numpy.Reshape 重塑數組

使用 Numpy.Reshape 重塑數組

喵喔喔 2021-09-11 19:13:22
我正在嘗試使用 numpy.reshape 重塑數組,但總是遇到索引錯誤"IndexError: index 15484 is out of bounds for axis 0 with size 7231"然后我打印出數組的形狀(7231,80,60,4)我的代碼是X = np.array([i[0] for i in train]).reshape(-1,80,60,1)(我試圖將我的所有圖像重塑為 (-1,80,60,1))我認為 -1 自動完成了尺寸,所以我很困惑為什么我會收到這個錯誤?火車是:    train = train_data[:-500]train_data 是一個包含圖像像素和標簽元組的數組有人能幫我嗎?
查看完整描述

3 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

整形時要小心。即使它有效,元素的排列也可能不是你想要的。


從一個我們可以形象化的簡單數組開始:


In [805]: x = np.arange(24).reshape(3,2,4)

In [806]: x

Out[806]: 

array([[[ 0,  1,  2,  3],

        [ 4,  5,  6,  7]],


       [[ 8,  9, 10, 11],

        [12, 13, 14, 15]],


       [[16, 17, 18, 19],

        [20, 21, 22, 23]]])

重塑為 (-1,2,1) - 但讓我們刪除最后 1 以獲得更緊湊的顯示:


In [807]: x.reshape(-1,2)

Out[807]: 

array([[ 0,  1],

       [ 2,  3],

       [ 4,  5],

       [ 6,  7],

       [ 8,  9],

       [10, 11],

       [12, 13],

       [14, 15],

       [16, 17],

       [18, 19],

       [20, 21],

       [22, 23]])

注意原始 [0,1,2,3] 行是如何分成 2 行的。


另一種重新分配大小為 4 的最后一個維度的方法是:


In [808]: np.vstack([x[...,i] for i in range(4)])

Out[808]: 

array([[ 0,  4],

       [ 8, 12],

       [16, 20],

       [ 1,  5],

       [ 9, 13],

       [17, 21],

       [ 2,  6],

       [10, 14],

       [18, 22],

       [ 3,  7],

       [11, 15],

       [19, 23]])

如果我們使用np.stack并得到 (4,3,2) 形狀,那可能會更清楚


array([[[ 0,  4],

        [ 8, 12],

        [16, 20]],

  ....

x.transpose(2,0,1) 產生同樣的東西。


reshape保留元素的散亂/扁平順序。轉置改變它。


In [812]: x.transpose(2,0,1).ravel()

Out[812]: 

array([ 0,  4,  8, 12, 16, 20,  1,  5,  9, 13, 17, 21,  2,  6, 10, 14,...])

In [813]: x.reshape(-2,2).ravel()

Out[813]: 

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, ...])


查看完整回答
反對 回復 2021-09-11
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

您擁有的代碼沒有做您認為的那樣。i[0]獲取第一個軸上的第 0 個元素,即您的80,這不是您想要的。

無論如何,您真正想要的是選擇最快方向的第一個切片,所以只需執行以下操作:

X = train[:,:,:,0:1]

如果您的數據實際上不是您所說的大小,請嘗試:

X = np.array([i.reshape(80, 60, 4)[:,:,0:1] for i in train])


查看完整回答
反對 回復 2021-09-11
  • 3 回答
  • 0 關注
  • 268 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號