我想创建一个数组,该数组从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)
它返回一个等距排列的数组,而不是对数递增。
答案 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]