Вариант вашего последнего отклоненного решения работает
In [180]: x=np.zeros(20)
In [181]: x2=x[2:10]
In [182]: x2[:] = np.linspace(0,1,len(x2))
In [183]: x
Out[183]:
array([0. , 0. , 0. , 0.14285714, 0.28571429,
0.42857143, 0.57142857, 0.71428571, 0.85714286, 1. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ])
x2
- это view
, поэтому его изменение действительно изменяет x
.
Самое чистое решение, которое я могудумать о том, чтобы начать с slice
объекта:
In [188]: idx = slice(2,10)
In [189]: x[idx] = np.linspace(1,2,idx.stop-idx.start)
In [190]: x
Out[190]:
array([0. , 0. , 1. , 1.14285714, 1.28571429,
1.42857143, 1.57142857, 1.71428571, 1.85714286, 2. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ])