"fitting" 复数的 for 循环

for-loop for "fitting" a complex number

我需要计算一些折射率,看起来像这样 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。而且它们之间没有特殊的联系,所以每一种组合都是允许的。有没有一种聪明的方法可以在那里得到复数?还是我必须计算两者的每一种可能组合?

看看 numpy.linspacenumpy.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 算法可能会更有效。

顺便说一句,如果您希望点数是整数,请不要提供整数作为范围,而是像 + 1:

>>> 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.])