擅长:python、mysql、java
<p>这里有一个单程解决方案</p>
<p>1)计算连续点之间的差值<em>d</em></p>
<p>2)ceil将<em>d</em>分步得到<em>m</em></p>
<p>2a)可选地将<em>m</em>四舍五入到最接近的二次方</p>
<p>3)将<em>d</em>除以<em>m</em>并重复结果<em>m</em>次</p>
<p>4)形成累计和</p>
<p>这是密码。技术说明:d的第一个元素不是差,而是“锚”,因此它等于数据的第一个元素。你知道吗</p>
<pre><code>def fill(data, step, force_power_of_two=True):
d = data.copy()
d[1:] -= data[:-1]
if force_power_of_two:
m = 1 << (np.frexp(np.nextafter(d / step, -1))[1]).clip(0, None)
else:
m = -(d // -step).astype(int)
m[0] = 1
d /= m
return np.cumsum(d.repeat(m))
</code></pre>
<p>运行示例:</p>
<pre><code>>>> inp
array([10.08 , 14.23 , 19.47 , 21.855, 24.34 , 25.02 ])
>>> fill(inp, 3)
array([10.08 , 12.155, 14.23 , 16.85 , 19.47 , 21.855, 24.34 , 25.02 ])
</code></pre>