Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在每次迭代中使用不同的变量多次运行python脚本_Python - Fatal编程技术网

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

在每次迭代中使用不同的变量多次运行python脚本,python,Python,我目前正在用python和Zemax模拟光通过光学系统。我现在已经设置好了,在这里我定义了“传感器”的x和y边界,我可以选择我想要模拟的区域的大小。我得到一个矩形 我想在3x3网格中模拟九个矩形。我不确定哪条路最优雅。。。我的第一个想法是将不同的时间间隔“硬编码”成9个不同的脚本,并通过bash脚本运行这些脚本,但这似乎有点“不合法” 现在如何定义xmax、xmin、ymax、ymin,以便运行相同的模拟并获得这九个重角 我的想法是可能创建某种定义边界的列表,然后每次使用不同的边界重新运行模拟,

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

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

现在如何定义xmax、xmin、ymax、ymin,以便运行相同的模拟并获得这九个重角

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

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

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)

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

您能否共享当前用于获取一个矩形的代码,以便为我们提供一个工作的基础并适合您当前的方法?当然,我的错。我会用我想到的其他方法来编辑它,我不确定该怎么做,那就是我可以有一个参考文件,在其中我为每个较小的矩形指定边界。然后,我将该文件导入到我的模拟脚本中,然后使用每一组边界运行模拟,即我看到9次,但这不会让我得到9个填充大正方形的正方形吗?也许我没有正确地澄清我的问题:我试图在9个预定义的“区域”中对探测器进行采样,而不是将模拟时间分成9分。