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