2012-11-08 42 views
0

我已經從圖像的數據中做出了一個numpy數組。我想將numpy數組轉換爲一維數組。爲什麼我的numpy數組的形狀不變?

import numpy as np 
import matplotlib.image as img 

if __name__ == '__main__': 

    my_image = img.imread("zebra.jpg")[:,:,0] 
    width, height = my_image.shape 
    my_image = np.array(my_image) 
    img_buffer = my_image.copy() 
    img_buffer = img_buffer.reshape(width * height) 
    print str(img_buffer.shape) 

128x128圖像在這裏。

enter image description here

然而,該程序打印出(128,128)。我想img_buffer是一個一維數組。我如何重塑這個數組?爲什麼numpy實際上不會將數組重塑爲一維數組?

+0

它看起來像你有一個彩色圖像,但你只能閱讀圖像的每個像素的紅色通道。這是你的意圖嗎? –

+0

謝謝!我的初衷是讀取所有的RGB。爲什麼我只讀紅色頻道? – dangerChihuahua007

+1

@DavidFaux wim說,因爲顯然你已經很快編輯了這個問題來得到正確的代碼,你能不能改回來。它完全混淆有一個問題「爲什麼這不起作用」與代碼工作。 – seberg

回答

1

reshape不到位工作。您的代碼無效,因爲您沒有將由reshape返回的值分配回img_buffer

如果要將陣列展平爲一維,則可以使用ravelflatten更簡單的選項。

>>> img_buffer = img_buffer.ravel() 
>>> img_buffer.shape 
(16384,) 

否則,你想做的事:

>>> img_buffer = img_buffer.reshape(np.product(img_buffer.shape)) 
>>> img_buffer.shape 
(16384,) 

或者,更簡潔:

>>> img_buffer = img_buffer.reshape(-1) 
>>> img_buffer.shape 
(16384,) 
+0

啊謝謝! 'ravel()'做了詭計! – dangerChihuahua007

2

.reshape返回一個新的數組,而不是在地方重塑。

順便說一句,你似乎是試圖獲取圖像的字節串 - 你可能想使用my_image.tostring()代替。

+1

不建議將建議更新到問題中的代碼中,因爲問題和答案的背景不正確,無法幫助未來的讀者! – wim

相關問題