"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.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 算法可能会更有效。
顺便说一句,如果您希望点数是整数,请不要提供整数作为范围,而是像 + 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.])
我需要计算一些折射率,看起来像这样 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.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.])