2013-08-02 49 views
2

蟒蛇/切片我有MATLAB數組操作,如下所示:數組操作從MATLAB

[M,N]=size(I) ; 
J = zeros(2*M,2*N) ; 

J(1:2:end,1:2:end) = I ; 

J(2:2:end-1,2:2:end-1) = 0.25*I(1:end-1,1:end-1) + 0.25*I(2:end,1:end-1) + 0.25*I(1:end-1,2:end) + 0.25*I(2:end,2:end) ; 

J(2:2:end-1,1:2:end) = 0.5*I(1:end-1,:) + 0.5*I(2:end,:) ; 
J(1:2:end,2:2:end-1) = 0.5*I(:,1:end-1) + 0.5*I(:,2:end) ; 

我試圖重寫蟒蛇相同的操作,我想出了以下內容:

J=numpy.zeros((2*M,2*N)) 

J[::2,::2] = I ; 

J[2:-1:2,2:-1:2] = 0.25*I[1::-1,1::-1] + 0.25*I[2::,1::-1] + 0.25*I[1::-1,2::] + 0.25*I[2::,2::] 

J[2:-1:2,1::2] = 0.5*I[1::-1,] + 0.5*I[2::,] 

J[::2,2:-1:2] = 0.5*I[:,1::-1] + 0.5*I[:,2::] 

但是Python代碼給了我不同的結果。

誰能告訴我什麼是錯?

謝謝,

回答

4

通過這件一塊一塊地顯示你在你的範圍內有一些錯誤。我認爲你誤解了Python中有關數組的一些東西。

  1. 不同於MATLAB其中的陣列的第一個元素是array[1],在python陣列的第一個元素是array[0]
  2. 數組切片語法是array[start:stop:step],所以要從數組中的第五個元素開始每個第二個元素到最後,您將執行array[4::2]

只要通過這件作品,你會發現問題。例如,在第二等式的右手邊的第一要素應該是:

0.25*I[0:-1, 0:-1] 

注意,你要改變不需要這裏的第二個冒號,因爲你step是1和例一步,這一步走到最後。

+0

偉大的工作謝謝 –

+1

很高興我能幫忙。我通常不會對此有任何疑問,但是由於您看起來很喜歡這裏,所以我會指出,您應該接受適合您的答案,這樣人們纔不會再回到您的問題來給出答案。 – Vorticity

0

所以這裏是正確的移植的代碼:

J[::2,::2] = I ; 

J[1:-1:2,2:-1:2] = 0.25*I[0:-1,0:-1] + 0.25*I[1::,0:-1] + 0.25*I[0:-1,1::] + 0.25*I[1::,1::] 

J[1:-1:2,0::2] = 0.5*I[0:-1,] + 0.5*I[1::,] 

J[0::2,1:-1:2] = 0.5*I[:,0:-1] + 0.5*I[:,1::]