2016-02-08 60 views
2

我有一個numpy數組arr1它是一個函數的輸出。該數組具有由numpy數組內部的每個元素作爲numpy數組本身引發的「額外」維度。如何重塑這個numpy數組以排除「額外維度」?

arr1.shape輸出(100, 20, 1)

如果我打印陣列,print(arr1[0])輸出

array([[-212537.61715316], 
     [ 7258.38476409], 
     [ 37051.91250884], 
     [-146278.00512207], 
     [-185792.24620168], 
     [-200794.59538468], 
     [-195981.27879612], 
     [-177912.26034464], 
     [-152212.805867 ], 
     [-118873.26452198], 
     [ -64657.64682999], 
     [ 306884.11196766], 
     [-191073.9891907 ], 
     [-104992.44840277], 
     [ -67834.43041102], 
     [ -21810.77063542], 
     [ 17307.24511071], 
     [ 55607.49775471], 
     [ 91259.82533592], 
     [ 119207.40589797]]) 

如果我重塑與arr1.reshape((100,20)),我得到print(arr1.reshape((100,20))[0])以下的輸出:

array([-212537.61715316, 7258.38476409, 37051.91250884, 
     -146278.00512207, -185792.24620168, -200794.59538468, 
     -195981.27879612, -177912.26034464, -152212.805867 , 
     -118873.26452198, -64657.64682999, 306884.11196766, 
     -191073.9891907 , -104992.44840277, -67834.43041102, 
     -21810.77063542, 17307.24511071, 55607.49775471, 
     91259.82533592, 119207.40589797]) 

我的問題是:我如何排除這個「額外」的,但保留ar的原始形狀ray arr1

是最好的方法使用.reshape()?如果不是,那麼做到這一點的最好方法是什麼?

+0

我認爲你正在尋找[numpy.squeeze](http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.squeeze.html) – Christoph

+2

「我該如何排除這個「額外」一個,但保留數組arr1的原始形狀「 - 您想更改形狀,但保持原始形狀?你似乎在與自己作對。什麼*精確*是關於你想保存的原始數組? – user2357112

+0

@ user2357112我可能不清楚。讓我編輯上述內容。 我說我的原始數組是一個數組,其中每個浮點本身就是一個數組。這並不理想。什麼是「標準Python」方式將每個元素作爲一個浮點數來投射? – ShanZhengYang

回答

2

您正確使用reshape

arr2 = arr1.reshape((100,20)) 

這樣做的形狀將是(100,20),同樣爲arr1沒有最後維度。

arr1[0]具有形狀(20,1),因此打印爲列。

arr2[0] has shape(20,),因此打印爲一行(s)(括號括起)。你可能不喜歡顯示器,但形狀是正確的。

squeeze也可以用來取出額外的維度,但結果將是相同的。

print(arr2[0][:,None])應作爲列打印。它在印刷之前有效地增加了額外的維度。

+0

謝謝你的解釋。這正是我所問的。 – ShanZhengYang

2

你可能會尋找numpy.squeeze

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.squeeze.html

a = np.arange(10*20).reshape((10, 20, 1)) 
print(a.shape) 
# (10, 20, 1) 
a = a.squeeze() 
print(a.shape) 
# (10, 20) 

注意,因爲對方的回答你的reshape應該有工作你剛纔看的輸出不正確。

+0

完美!我從來不知道這存在。謝謝! – ShanZhengYang

+0

您是否可以在正文中包含相關的代碼片段,因爲外部鏈接可能會失效。 (此外,優秀的答案,爲未來的使用做了一個心理筆記)。 –

+0

@ShanZhengYang注意hpaulj自'reshape'以來的答案也適用於你。 – daveydave400