gpt4 book ai didi

python - 将元素插入到 numpy 数组中,以便最小间距是任意的

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:15 30 4
gpt4 key购买 nike

给定一个有序的 numpy float 组(从最小值到最大值),我需要确保元素之间的间距小于我称为 step 的任意 float 。

这是我的代码,据我所知它是有效的,但我想知道是否有更优雅的方法来做到这一点:

import numpy as np

def slpitArr(arr, step=3.):
"""
Insert extra elements into array so that the maximum spacing between
elements is 'step'.
"""
# Keep going until no more elements need to be added
while True:
flagExit = True
for i, v in enumerate(arr):
# Catch last element in list
try:
if abs(arr[i + 1] - v) > step:
new_v = (arr[i + 1] + v) / 2.
flagExit = False
break
except IndexError:
pass
if flagExit:
break
# Insert new element
arr = np.insert(arr, i + 1, new_v)

return arr


aa = np.array([10.08, 14.23, 19.47, 21.855, 24.34, 25.02])

print(aa)
print(slpitArr(aa))

结果是:

[10.08  14.23  19.47  21.855 24.34  25.02 ]
[10.08 12.155 14.23 16.85 19.47 21.855 24.34 25.02 ]

最佳答案

这是一个一次性解决方案

1) 计算连续点之间的差异d

2) ceil-逐步划分d得到m

2a) 可选地将 m 舍入到最接近的 2 的幂

3) 将d 除以m 并将结果重复m

4)形成累加和

这是代码。技术说明:d的第一个元素不是difference而是“anchor”,所以它等于data的第一个元素。

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))

样本运行:

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

关于python - 将元素插入到 numpy 数组中,以便最小间距是任意的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769257/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com