python - 分解 numpy 代码

标签 python python-3.x numpy scipy

<分区>

我一直在仔细阅读文档并重新阅读/运行以下代码,以便准确了解发生了什么。不过,我的知识仍然存在差距。我想向您展示代码,并附上评论,这表示我的知识空白,希望你们中的一些人愿意填补。

所以这是我对 friend 的要求:
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()

谢谢伙伴们!

最佳答案

使用 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()

关于python - 分解 numpy 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998387/

相关文章:

python - ipaddress.IPv4Network 迭代 1 个主机部分

python-3.x - 在 Python 中关闭管道

python - 在 Numpy/Pandas 中生成所有平行对角线总和的直接方法?

python - 我应该在哪里定义我在 __init__ 中使用的函数

python - 摩尔斯电码到英语 python3

python - 访问具有 .X 属性的变量的当前值时,Gurobi 返回 AttributeError 错误

python - 如果匹配条件,则替换字符串中的最后三个字符

python - 关于 fit_generator()/fit() 和线程安全

python - 如何将 numpy 数组与列表相乘以获得多维数组?

python - 图像 Python 的滚动统计