python - 在 Python 中生成数字序列(曲线)
问题描述
我正在尝试生成一个 120 个数字的非线性序列,范围在 7 到 20 之间。
我已经尝试过使用numpy geomspace和logspace,这给了我几乎相同的结果。它可以满足我的要求,但是可以说产生的“曲线”不够“尖锐”。
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]
结果序列不在我的脑海中,只是为了给出一个想法。
解决方案
有许多非线性函数可用于该任务(这里列出了一些)。下面是一个简单的指数函数,用于在两个数字之间生成非线性数组。您可以在函数中控制曲率:
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.]
推荐阅读
- c# - 为每个构建/编译生成唯一 ID,而不是构建号
- c++ - C++中数组的背景知识
- javascript - 如何使用 JSON 创建 ul li 动态菜单
- python - Python基本数学运算
- bash - 在 bash shell 脚本中打印最后一个登录用户的输出中的问题?
- python-3.x - 如何使用 openpyxl 将列表内容写入 Excel 工作表
- reactjs - 反应:无法从这个文件中缩小代码 - 因为我做了一个改变
- android - 是否应该避免将应用程序上下文传递给应用程序中的这么多类?
- sql - MERGE INTO 更新失败
- ios - 为什么 autoFocusRangeRestriction 没有效果?