2016-12-15 64 views
3

在包裝numpy他們是兩個功能調整大小和重塑。他們的內部工作方式他們使用什麼樣的插值?我查看了代碼,但沒有得到它。誰能幫我嗎。或者圖像如何調整大小。它的像素會發生什麼?numpy.resize和numpy.reshape函數如何在python內部工作?

+0

從文檔:如果新數組比原數組大,那麼新的陣列充滿的重複副本。 https://docs.scipy.org/doc/numpy/reference/generated/numpy.resize.html – user4421975

+0

「np.resize」和「np.reshape」都不適合圖片大小調整。 Numpy是關於數組的,而不是圖像。 – Eric

回答

2

據我所知numpy.reshape()只是重塑一個矩陣(如果它是一個圖像或不重要)。它不做任何插值,只是操縱矩陣中的項目。

a = np.arange(12).reshape((2,6)) 


a= [[ 0 1 2 3 4 5] 
    [ 6 7 8 9 10 11]] 


b=a.reshape((4,3)) 

b=[[ 0 1 2] 
    [ 3 4 5] 
    [ 6 7 8] 
    [ 9 10 11]] 
5

既不插入。如果你想知道圖像的插值和像素,他們可能不是你想要的功能。有一些image包(例如在scipy)操縱圖像的分辨率。

每個numpy數組有一個shape屬性。 reshape只是改變了這一點,根本不改變數據。新形狀必須引用與原始形狀相同的元素總數。

x = np.arange(12) 
x.reshape(3,4) # 12 elements 
x.reshape(6,2) # still 12 
x.reshape(6,4) # error 

np.resize是不常用的,但用Python編寫的,可供研究。你必須閱讀它的文檔,並且x.resize是不同的。越來越大,它實際上重複值或填充零。調整大小的

例子1D作用:

In [366]: x=np.arange(12) 
In [367]: np.resize(x,6) 
Out[367]: array([0, 1, 2, 3, 4, 5]) 
In [368]: np.resize(x,24) 
Out[368]: 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 
     5, 6, 7, 8, 9, 10, 11]) 
In [369]: x.resize(24) 
In [370]: x 
Out[370]: 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0]) 

最近的問題有關scipy.misc.imresize。它還引用scipy.ndimage.zoom

Broadcasting error when vectorizing misc.imresize()

+1

_「重塑剛剛改變['.shape']」_ - 更準確地說,它創建了一個改變了的視圖,而不是實際修改它被調用的對象 – Eric