用于“拟合”复数的for循环

时间:2018-07-13 09:43:25

标签: python python-3.x data-science

我需要计算折射率类似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。它们之间没有特殊的连接,因此允许每种组合。是否有一种巧妙的方法可以将复数存入其中?还是我必须计算两者的所有可能组合?

1 个答案:

答案 0 :(得分:0)

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