2014-02-24 75 views
2

我一直在認真閱讀文檔和重讀/運行下面的代碼,以便準確理解發生了什麼。儘管我的知識仍然存在差距。我希望向您提供代碼,並提供意見,這些意見表示我希望有些人願意填補的知識空白。打破numpy代碼

因此,這裏有我的要求的朋友:
1)幫我填空白我所知
2)解釋什麼是在非技術和簡單的格式怎麼回事一步一步來。

import numpy 
import scipy.misc 
import matplotlib.pyplot 

lena = scipy.misc.lena() 


''' Generates an artificial range within the framework of the original array (Which is an image) 
This artificial range will be paired with another one and used to 'climb' 
Through the original array and make changes''' 

def get_indices(size): 
    arr = numpy.arange(size) 
    #This sets every fourth element to False? How? 
    return arr % 4 == 0 

lena1 = lena.copy() 
xindices = get_indices(lena.shape[0]) 
yindices = get_indices(lena.shape[1]) 




'''I am unsure of HOW the below code is executing. I know something is being 
Set to zero, but what? And how can I verify it?''' 

lena[xindices, yindices] = 0 

#What does the argument 211 do exactly? 
matplotlib.pyplot.subplot(211) 
matplotlib.pyplot.imshow(lena1) 


matplotlib.pyplot.show() 

謝謝配偶!

+0

您是否嘗試瞭解scipy.misc.lena是否返回?你在哪裏或爲什麼卡住了? –

+0

是的,我明白這一點。對我來說,最令人困惑的部分是「lena [xindices,yindices] = 0」 –

+0

'a [i,j]'只是對'a [i] [j]'說的一種粗糙的方式,即索引多維數組。 http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html –

回答

3

使用Python調試器對於在代碼執行過程中執行代碼時非常有用。寫在你選擇的任何地方如下:

import pdb; pdb.set_trace() 

執行將停止,您可以通過線檢查任何變量,使用任何定義的函數,並提前線。

這裏有一個註釋版本的代碼。該函數的評論被轉換爲一個文檔字符串,並且可以執行doctest。

import numpy 
import scipy.misc 
import matplotlib.pyplot 

# Get classic image processing example image, Lena, at 8-bit grayscale 
# bit-depth, 512 x 512 size. 
lena = scipy.misc.lena() 
# lena is now a Numpy array of integers, between 245 and 25, of 512 rows and 
# 512 columns. 


def get_indices(size): 
    """ 
    Returns each fourth index in a Numpy vector of the passed in size. 
    Specifically, return a vector of booleans, where all indices are set to 
    False except those of every fourth element. This vector can be used to 
    index another Numpy array and select *only* those elements. Example use: 

     >>> import numpy as np 
     >>> vector = np.array([0, 1, 2, 3, 4]) 
     >>> get_indices(vector.size) 
     array([ True, False, False, False, True], ...) 

    """ 
    arr = numpy.arange(size) 
    return arr % 4 == 0 

# Keep a copy of the original image 
lena1 = lena.copy() 

# Use the defined function to get every fourth index, first in the x direction, 
# then in the y direction 
xindices = get_indices(lena.shape[0]) 
yindices = get_indices(lena.shape[1]) 


# Set every pixel that equals true in the vectors further up to 0. This 
# selects **each fourth pixel on the diagonal** (from up left to bottom right). 
lena[xindices, yindices] = 0 

# Create a Matplotlib plot, with 2 subplots, and selects the one on the 1st 
# colum, 1st row. The layout for all subplots is determined from all calls to 
# subplot, i.e. if you later call `subplot(212)` you will get a vertical layout 
# in one column and two rows; but if you call `subplot(221)` you will get a 
# horizontal layout in two columns and one row. 
matplotlib.pyplot.subplot(211) 
# Show the unaltered image on the first subplot 
matplotlib.pyplot.imshow(lena1) 
# You could plot the modified original image in the second subplot, and compare 
# to the unmodified copy by issuing: 
#matplotlib.pyplot.subplot(212) 
#matplotlib.pyplot.imshow(lena) 

matplotlib.pyplot.show()