Я ходил кругами с этой, казалось бы, простой проблемой в течение нескольких часов, и я не могу найти ответ.
Установка проста: с учетом массива чисел с плавающей точкой интерполируйте дополнительные точки так, чтобырезультирующие интерполированные данные распределяются с постоянной (или приблизительно постоянной) плотностью.
Стандартная интерполяция работает, но плотность интерполированных точек совсем не постоянна (правый график):
Я, должно быть, здесь упускаю что-то очевидное, потому что я уверен, что эта проблема не так уж сложна, и я боролся слишком долго.
Любая помощь очень ценится.
import numpy as np
import matplotlib.pyplot as plt
data = np.array([13.826, 13.608, 13.163, 13.034, 12.672, 12.126, 11.585, 11.192,
10.609, 10.082, 9.67 , 9.261, 9.175, 8.869, 8.408, 7.868,
7.317, 6.827, 6.52 , 6.375, 5.968, 5.601, 5.271, 5.242,
4.961, 4.888, 4.661, 4.395, 4.376, 4.286, 4.105, 4.019,
3.845, 3.785, 3.601, 3.371, 3.226, 3.156, 2.984, 2.96 ,
2.931, 2.786, 2.757, 2.62 , 2.554, 2.473, 2.464, 2.451,
2.309, 2.196, 2.15 , 2.061, 1.987, 1.907, 1.825, 1.803,
1.721, 1.62 , 1.595, 1.57 , 1.462, 1.346, 1.334, 1.208,
1.09 , 1.033, 0.94 , 0.874, 0.852, 0.857, 0.872, 0.884,
0.889, 0.888, 0.9 , 0.856, 0.756, 0.652, 0.567, 0.495,
0.432, 0.378, 0.331, 0.293, 0.264, 0.244, 0.232, 0.228,
0.228, 0.231, 0.239, 0.248, 0.261, 0.278, 0.308, 0.357,
0.417, 0.495, 0.575, 0.59 , 0.544, 0.465, 0.355, 0.246,
0.138, 0.032, -0.032, -0.075, -0.139, -0.179, -0.28 , -0.38 ,
-0.471, -0.565, -0.671, -0.772, -0.872, -0.974, -1.069, -1.164,
-1.257, -1.169, -1.131, -1.084, -1.016, -0.936, -0.846, -0.748,
-0.647, -0.546, -0.444, -0.348, -0.274, -0.159, -0.05 , 0.091,
0.145, 0.236, 0.318, 0.239, 0.105, -0.036, -0.168, -0.303,
-0.304, -0.429, -0.571, -0.685, -0.704, -0.806, -0.849, -0.865,
-0.835, -0.823, -0.892, -0.928, -0.978, -1.077, -1.156, -1.065,
-1.153, -1.244, -1.332, -1.426, -1.523, -1.623, -1.722, -1.819,
-1.918, -2.03 , -2.135, -2.233, -2.33 , -2.423, -2.516, -2.609,
-2.7 , -2.791, -2.88 , -2.948, -3.913])
# Number of points to interpolate
N = 1000
t = np.linspace(0, 1, N)
xp = np.linspace(0, 1, data.size)
# Interpolated data
d_interp = np.interp(t, xp, data)
plt.subplot(121)
plt.scatter(t, d_interp, label='Interpolated points')
plt.scatter(xp, data, s=4, label='Original data')
plt.legend()
plt.subplot(122)
plt.hist(d_interp, 25, label='Density of interpolated data')
plt.legend()
plt.show()