如何在Python中创建对数间距的数组?

时间:2018-09-18 15:50:50

标签: python arrays

我想创建一个数组,该数组从10 ^(-2)开始,对数间距为10 ^ 5,如下所示:

levels = [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08. 0.09, 0.1, 0.2,..., 10.,20.,30.,40.,50.,60.,70.,80.,90.,100.,200.,300.,400.,500.,600.,700.,800.,900.,1000.,2000.,3000.,4000.,5000.,6000.,7000.,8000.,9000.,10000.,20000.,30000., ..., 100000.]

有没有一种方法可以创建它而无需写下每个数字?

我注意到NumPy中有一个名为logspace的函数,但这对我不起作用,因为在我写的时候:

levels = np.logspace(-2., 5., num=63)

它返回一个等距排列的数组,而不是对数递增。

1 个答案:

答案 0 :(得分:5)

您可以使用外部产品来获得所需的输出。 @Matt Messersmith指出,您只需在答案的末尾附加100000即可answer = np.append(answer, 100000)

说明

创建一个从0.01到10000的对数值范围的值

[1.e-02 1.e-01 1.e+00 1.e+01 1.e+02 1.e+03 1.e+04]

然后创建一个乘数数组

[1 2 3 4 5 6 7 8 9]

最后,将外积乘以生成所需的值范围。

a1 = np.logspace(-2, 4, 7)
# a1 = 10.**(np.arange(-2, 5)) Alternative suggested by @DSM in the comments
a2 = np.arange(1,10,1)
answer = np.outer(a1, a2).flatten()

输出

[1.e-02 2.e-02 3.e-02 4.e-02 5.e-02 6.e-02 7.e-02 8.e-02 9.e-02 1.e-01 2.e-01 3.e-01 4.e-01 5.e-01 6.e-01 7.e-01 8.e-01 9.e-01 1.e+00 2.e+00 3.e+00 4.e+00 5.e+00 6.e+00 7.e+00 8.e+00 9.e+00 1.e+01 2.e+01 3.e+01 4.e+01 5.e+01 6.e+01 7.e+01 8.e+01 9.e+01 1.e+02 2.e+02 3.e+02 4.e+02 5.e+02 6.e+02 7.e+02 8.e+02 9.e+02 1.e+03 2.e+03 3.e+03 4.e+03 5.e+03 6.e+03 7.e+03 8.e+03 9.e+03 1.e+04 2.e+04 3.e+04 4.e+04 5.e+04 6.e+04 7.e+04 8.e+04 9.e+04]