4

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

我已经尝试过使用numpy geomspacelogspace,这给了我几乎相同的结果。它可以满足我的要求,但是可以说产生的“曲线”不够“尖锐”。

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

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

[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]

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

4

1 回答 1

1

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

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


于 2019-07-21T08:41:05.583 回答