Этот подход размещает элементы non-nan на границах, оставляя значения nan
в центре, хотя он не будет равномерно распределять значения nan
.
arr = [4,5,1,2,6,8]
stretch_len = 8
def stretch(arr, stretch_len):
stretched_arr = np.empty(stretch_len)
stretched_arr.fill(np.nan)
arr_len = len(arr)
if arr_len % 2 == 0:
mid = int(arr_len/2)
stretched_arr[:mid] = arr[:mid]
stretched_arr[-mid:] = arr[-mid:]
else:
mid = int(np.floor(arr_len/2))
stretched_arr[:mid] = arr[:mid]
stretched_arr[-mid-1:] = arr[-mid-1:]
return stretched_arr
Вот несколько тестов, которые я тестировал:
Контрольные примеры:
In [104]: stretch(arr, stretch_len)
Out[104]: array([ 4., 5., 1., nan, nan, 2., 6., 8.])
In [105]: arr = [4, 5, 1, 2, 6, 8, 9]
In [106]: stretch(arr, stretch_len)
Out[106]: array([ 4., 5., 1., nan, 2., 6., 8., 9.])
In [107]: stretch(arr, 9)
Out[107]: array([ 4., 5., 1., nan, nan, 2., 6., 8., 9.])