生成 Python 中的数字序列(曲线)

Generating sequence of numbers in Python (curved)

我正在尝试生成一个由 7 到 20 之间的 120 个数字组成的非线性序列。

我已经尝试使用 numpy geomspacelogspace,这给了我几乎相同的结果。它做了我想要的,但是结果 "curve" 还不够 "sharp" 可以这么说。

import numpy as np
TILE_NONLINEAR = np.geomspace(7, 20, num=120)

我需要控制一个上升和下降。缓慢的开始和结束时的快速加速 and/or 反之亦然。例如,结果应该是这样的:

[7, 7.001, 7.003, 7.01 ..... 17.1, 17.3, 17.8, 18.7, 20]

[7, 7.8, 8.5, 9, ..... 19.9, 19.95, 19.98, 20]

结果序列不在我的脑海中,只是为了提供一个想法。

有一堆非线性函数可用于该任务(列出了一些 here)。下面是一个简单的指数函数,用于生成两个数字之间的非线性数组。可以在函数中控制曲率:

import numpy as np

def nonlinspace(start, stop, num):
    linear = np.linspace(0, 1, num)
    my_curvature = 1
    curve = 1 - np.exp(-my_curvature*linear)
    curve = curve/np.max(curve)   #  normalize between 0 and 1
    curve  = curve*(stop - start-1) + start
    return curve

arr = nonlinspace(7, 21, 10)

#rounded result : [ 7., 9.16, 11.1, 12.83, 14.38, 15.77, 17.01, 18.12, 19.11, 20.]