我需要计算折射率类似ref_i = n + ik的东西,因此它是一个复数。然后,我将结果与给定数据进行比较以进行比较。但是我不知道如何以有效的方式测试所有可能的复数组合。现在我只做真正的事情:
n = 0.1
step = 0.001
for i in range (1,8000):
calculation()
compare()
n = n + step
而n可以是0.1到8之间的任何值,k可以是0-20。它们之间没有特殊的连接,因此允许每种组合。是否有一种巧妙的方法可以将复数存入其中?还是我必须计算两者的所有可能组合?
答案 0 :(得分:0)
看看numpy.linspace
和numpy.meshgrid
:
import numpy
lsp_re = numpy.linspace(0.1, 8, 8000)
lsp_im = numpy.linspace(0, 20, 20001)
re, im = numpy.meshgrid(lsp, lsp, copy=False)
matrix = 1j * im + re
for c in matrix.flat:
dosomething(c)
但是,通过这种方式,您有8000×8000 = 64000000个组合,因此,如果您担心数据在行进的地方可能表现出不同的行为,那么减少行进次数或使用Monte Carlo算法可能会更有效。
顺便说一句,如果您想让点成为整数,则不要提供整数作为范围,而是像
>>> numpy.linspace(0, 10, 10)
array([ 0. , 1.11111111, 2.22222222, 3.33333333,
4.44444444, 5.55555556, 6.66666667, 7.77777778,
8.88888889, 10. ])
>>> numpy.linspace(0, 10, 11)
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])