【问题标题】:Raster scan pattern python光栅扫描模式python
【发布时间】:2014-01-02 06:12:45
【问题描述】:

我正在尝试创建一个代表光栅扫描模式的 xy 位置列表,如下所示:

简单地说,我正在使用嵌套循环和 if else 语句,但它变得混乱。有没有一种简单的方法可以生成一个固定步长的位置列表?

【问题讨论】:

    标签: python list plot


    【解决方案1】:

    一种可能的解决方案,使用 Numpy 和普通 Python 的混合:

    from pylab import *
    
    # define some grids
    xgrid = arange(20, 31) 
    ygrid = arange(10, 16)
    
    xscan = []
    yscan = []
    
    for i, yi in enumerate(ygrid):
        xscan.append(xgrid[::(-1)**i]) # reverse when i is odd
        yscan.append(ones_like(xgrid) * yi)   
    
    # squeeze lists together to vectors
    xscan = concatenate(xscan)
    yscan = concatenate(yscan)
    
    # quick plot
    plot(xscan, yscan, '.-')
    axis([19, 31, 9, 16])
    show()
    

    它的工作方式是为 x 和 y 定义 2 个空列表,您一次将一条扫描线附加到其中。对于 x 坐标,您还需要一条向前和一条向后的线(xgrid[::1] 用于向前,xgrid[::-1] 用于向后,交替的+1-1(-1)**i 获得),而对于 y-坐标,您必须为每个 x 坐标重复一个 y 值。最后,您必须将concatenate 向量列表合并为单个向量。

    使用 list-comprehension 和 repeat 可以在不使用任何 for 循环的情况下实现相同的目的,如下所示:

    xscan = concatenate([xgrid[::(-1)**i] for i in range(len(ygrid))])
    yscan = repeat(ygrid, len(xgrid))
    

    生成的扫描模式:

    【讨论】:

    • 有趣,你能解释一下循环是如何工作的吗?以我目前的知识水平,这对我来说似乎相对难以理解。谢谢!
    • 我添加了更多解释,希望现在清楚。如果没有,请尝试学习一些基本的 python 和 numpy 教程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多