Полагаю, это должно быть:
for i in range(len(y_test)):
for j in range(4):
w3[i:j]=1/(abs(w2-w[i:j]+1))
Причина в том, что w2
- это массив 1-го порядка. При вызове w2[0]
выдаст вам первый элемент 4.50000e+01
, но не весь массив [4.50000e+01, 6.03000e+02, 6.00000e+00, 2.01400e+03, 3.11572e+05]
. Вот почему w2[0:j]
(который является одним элементом) не может транслироваться с w[i:j]+1
, который является 5-элементным массивом.
Плюс, если я вас правильно понимаю, вам на самом деле не нужен внутренний l oop. Код может быть:
for i in range(len(w3)):
w3[i]=1/(abs(w2-w[i]+1))
Плюс, если вы не хотите писать какие-либо явные l oop, numpy
может быть очень удобным и дать вам тот же результат:
w3=1/abs(np.subtract(w2,w)+1)
Еще одно преимущество в том, что вам не нужно предварительно определять w3
. Поэтому я бы порекомендовал.