【问题标题】:Generating sequence of numbers in Python (curved)在 Python 中生成数字序列(曲线)
【发布时间】:2019-11-29 09:47:19
【问题描述】:

我正在尝试生成一个由 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]

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

【问题讨论】:

  • 就像动画补间曲线。变化的速度在开始和结束时较慢,在中间较快。
  • 大声笑,是的。我正在动画应用程序的 Python API 接口中编写一个例程。我很乐意使用内置曲线,但不幸的是,在这种情况下,我需要在每一帧上写。从而手动生成序列。

标签: python numpy numbers sequence non-linear


【解决方案1】:

有很多非线性函数可以用于这个任务(一些列在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.]


【讨论】:

  • 完美,谢谢!
猜你喜欢
  • 2023-02-20
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多