我已經有一個形狀爲(1,224,224)的單個通道圖像的數組。我想改變它(1,1,224,224)。我一直在努力在另一個1d數組中插入一個numpy多維數組
newarr.shape
#(1,224,224)
arr = np.array([])
np.append(arr, newarr, 1)
我總是得到這個 IndexError:軸1出界[0,1)。如果我將軸移除爲0,則數組變平。我究竟做錯了什麼 ?
我已經有一個形狀爲(1,224,224)的單個通道圖像的數組。我想改變它(1,1,224,224)。我一直在努力在另一個1d數組中插入一個numpy多維數組
newarr.shape
#(1,224,224)
arr = np.array([])
np.append(arr, newarr, 1)
我總是得到這個 IndexError:軸1出界[0,1)。如果我將軸移除爲0,則數組變平。我究竟做錯了什麼 ?
1的維數是任意的,所以它聽起來像你想簡單地重新整形數組。這可以通過以下步驟完成:
newarr.shape = (1, 1, 244, 244)
或
newarr = newarr[None]
顯式賦值給'.shape'非常好,我不知道這個特性。這顯然可以用作一般的整形,例如, 'newarr.shape =(2,2,56,224)',並且如果元素的數量不被保留,它將引發一個'ValueError'。 –
'newarr = newarr [:, ...]'技巧似乎對'newarr'完全沒有任何影響。 –
@jmd_dk哎呀,我沒有''而是''而不是':'。現在問題已經解決。是的,這不能用於修改數組的整體大小。 – Daniel
的唯一方法做一個insert
進入一個更高維陣列是
bigger_arr = np.zeros((1, 1, 224, 224))
bigger_arr[0,...] = arr
換言之,使的一個目標陣列正確的大小,並分配值。
np.append
是一個陷阱。躲開它。
有時候這是一個有用的思考方式。但更簡單,更快速的是,將其視爲reshape
問題。
bigger_arr = arr.reshape(1,1,224,224)
bigger_arr = arr[np.newaxis,...]
arr.shape = (1,1,224,224) # a picky inplace change
bigger_arr = np.expand_dims(arr, 0)
這最後一個做
a.reshape(shape[:axis] + (1,) + a.shape[axis:])
它給出瞭如何處理尺寸編程的想法。
只要做:'newarr [np.newaxis]'? – Divakar