繁体   English   中英

多次运行 python 脚本,每次迭代使用不同的变量

[英]Running a python script multiple times with different variables each iteration

我目前正在模拟通过具有 python 和 Zemax 的光学系统的光。 我已经设置了它,我定义了“传感器”的 x 和 y 边界,我可以选择我想要模拟的区域的大小。 我得到1个矩形。

我想在 3x3 网格中模拟九个矩形。 我不确定哪种方式最优雅......我的第一个想法是将不同的间隔“硬编码”为 9 个不同的脚本,并通过 bash 脚本运行它们,但这似乎有点“不雅”。

我现在如何定义 xmax、xmin、ymax、ymin 以便我可以运行相同的模拟并获得这九个 retangles?

我的想法是创建某种定义边界的列表,然后可能每次使用不同的边界重新运行模拟,最后合并出现的图像。

当前代码很长,但参数都设置在一个主函数中,如下所示:

if __name__ == '__main__':

    DirNameZmx = r'C:\Some\Path'
    FileNameZmx = r"Optics.zmx"

    DirNameResults = r"C:\Some\Other\Path"
    FileNameResults = r"Interferogram_Result"
    
    (QueueFieldsOut, QueueToDetector, ProcessRaytracing, ProcessesPsfWorkers, ProcessDetector) = \
        InitializeSimulation(DirNameZmx=DirNameZmx, FileNameZmx=FileNameZmx,
                             DirNameResults=DirNameResults, FileNameResults=FileNameResults,
                             FieldAngleHxMin=-0.02, FieldAngleHxMax=+0.02, dFieldAngleX=0.001,
                             FieldAngleHyMin=-0.06, FieldAngleHyMax=+0.06, dFieldAngleY=0.001,
                             NbrWavelength=1, Configurations=[1, 2], NbrRaysFieldRow=32, RAperture=0.99,
                             DetectorImageSize=11., DetectorPixelSize=0.011, ZeroPadding=8,
                             BatchRaysMax=512**2, NbrProcessWorkers=2)

    print(ProcessRaytracing.join())
    for Process in ProcessesPsfWorkers:
        print(Process.join())
        print(Process.name, Process.exitcode)

    print(ProcessDetector.join())

    data = np.load(os.path.join(DirNameResults, FileNameResults+'.npy'))
    plt.imshow(data, cmap="coolwarm")
    plt.show()

FieldAngleHxMin/Max 和 FieldAngleHyMin/Max 是矩形边界。 结果如下所示: 在此处输入图像描述

简单的迭代将完成工作。

尝试这个:

def nine_squares(FieldAngleHxMin, FieldAngleHxMax, FieldAngleHyMin, FieldAngleHyMax):
    xstep = (FieldAngleHxMax - FieldAngleHxMin) / 3
    ystep = (FieldAngleHyMax - FieldAngleHyMin) / 3
    for i in range(3):
        for j in range(3):
            xstartpoint = xstep + i * FieldAngleHxMin
            xendpoint = xstep + (i + 1) * FieldAngleHxMin
            ystartpoint = ystep + i * FieldAngleHyMin
            yendpoint = ystep + (i + 1) * FieldAngleHyMin
            yield (xstartpoint, xendpoint, ystartpoint, yendpoint)

每次调用它都会返回开始和结束坐标的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM