我想取一个数组,并将每个连续成员之间的距离划分为更小的段,使得没有距离小于0。1.我尝试了以下代码:
arr = [0, 4.0, 4.5, 5.0, 8.05, 8.25]
n = 10
def create_segments(x, n0, i):
return np.round(np.linspace(x[i], x[i + 1], n0 + 1), 2)
out = []
for j in range(len(arr)-1):
xx = create_segments(arr, n, j)
if any(i < 0.1 for i in np.diff(xx)):
n = n -1
out.append(create_segments(arr, n, j))
else:
out.append(xx)
result = np.unique(np.concatenate(out))
print('result', result)
代码的输出是[0. 0.4 0.8 1.2 1.6 2. 2.4 2.8 3.2 3.6 4. 4.06 4.11 4.17 4.22 4.28 4.33 4.39 4.44 4.5 4.56 4.62 4.69 4.75 4.81 4.88 4.94 5. 5.38 5.76 6.14 6.52 6.91 7.29 7.67 8.05 8.08 8.11 8.14 8.16 8.19 8.22 8.25]
,对于某些部分,例如arr[4]和arr[5]之间的最后一部分,仍然有小于0的距离。1.
如果有人提出建议来纠正代码,我很感激。
1条答案
按热度按时间scyqe7ek1#
数组中的一些值的距离不够远,不足以容纳要将段划分成的值的数量。n只减1一次不会使它足够小,例如在4之间。0和4.5,则最多可以有5个中间值为0。1分开。
您可以直接计算出适当数量的分割值,而不是使用试错法:
输出:
如果你仍然想使用试错法,你需要在每一个段重置
n
,并在while循环中减少它: