2017-01-01 144 views
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,則數組變平。我究竟做錯了什麼 ?

+0

只要做:'newarr [np.newaxis]'? – Divakar

回答

1

1的維數是任意的,所以它聽起來像你想簡單地重新整形數組。這可以通過以下步驟完成:

newarr.shape = (1, 1, 244, 244) 

newarr = newarr[None] 
+0

顯式賦值給'.shape'非常好,我不知道這個特性。這顯然可以用作一般的整形,例如, 'newarr.shape =(2,2,56,224)',並且如果元素的數量不被保留,它將引發一個'ValueError'。 –

+0

'newarr = newarr [:, ...]'技巧似乎對'newarr'完全沒有任何影響。 –

+0

@jmd_dk哎呀,我沒有''而是''而不是':'。現在問題已經解決。是的,這不能用於修改數組的整體大小。 – Daniel

0

的唯一方法做一個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:]) 

它給出瞭如何處理尺寸編程的想法。

相關問題