Как сделать расчеты на наборе данных? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть 3 списка, а именно w, w2 и w3. Я хочу сделать расчеты по этим спискам. 1-й ряд w2 будет постоянным. Я получу разницу w2 относительно каждой строки w.

Вот мой код:

for i in range(len(y_test)):
    for j in range(4): 
        w3[i:j]=1/(abs(w2[0:j]-w[i:j]+1))

Вот ошибка, которую я получил:

     68 for i in range(len(y_test)):
     69     for j in range(4):
---> 70         w3[i:j]=1/(abs(w2[0:j]-w[i:j]+1))
     71 
     72 print('weights\n')

ValueError: operands could not be broadcast together with shapes (3,5) (2,5) 

Как это исправить?

Это списки: w состоит из 5 переменных и 112 столбцов

[4.50000e+01 9.92000e+02 9.00000e+00 2.01400e+03 4.67948e+05]
 [5.50000e+01 1.40250e+03 1.20000e+01 2.01000e+03 5.13789e+05]
 [6.00000e+01 1.25800e+03 1.10000e+01 2.01300e+03 5.01560e+05]
 [6.60000e+01 1.38380e+03 1.10000e+01 2.01300e+03 5.36669e+05]
 [4.50000e+01 6.16000e+02 9.00000e+00 2.01400e+03 4.34407e+05]
 [8.00000e+01 9.34000e+02 9.00000e+00 2.01400e+03 5.97031e+05]
 [6.70000e+01 1.15000e+03 1.10000e+01 2.01100e+03 4.28314e+05]
 [6.10000e+01 1.01800e+03 1.20000e+01 2.01200e+03 4.34545e+05]
 [4.30000e+01 8.00000e+02 8.00000e+00 2.01000e+03 3.46772e+05]
 [5.40000e+01 1.17900e+03 1.00000e+01 2.01400e+03 4.12340e+05]
 [4.18000e+01 1.13630e+03 6.00000e+00 2.01400e+03 3.89516e+05]
 [7.81000e+01 1.05160e+03 9.00000e+00 2.01000e+03 4.25690e+05]
 [3.40000e+01 4.92000e+02 5.00000e+00 2.01400e+03 3.39042e+05]
 [5.10000e+01 4.55000e+02 6.00000e+00 2.01400e+03 3.19335e+05]
 [4.51000e+01 5.85200e+02 8.00000e+00 2.01200e+03 2.67604e+05]
 [3.00000e+01 6.55000e+02 5.00000e+00 2.01300e+03 3.24866e+05]
 [4.00000e+01 1.04000e+03 1.10000e+01 2.01400e+03 5.72213e+05]
 [3.08000e+01 3.08000e+02 5.00000e+00 2.01300e+03 2.45087e+05]
 [7.10000e+01 9.60000e+02 9.00000e+00 2.01400e+03 4.01864e+05]
 [3.70000e+01 6.74000e+02 9.00000e+00 2.01200e+03 3.43534e+05]
 [5.20000e+01 1.10000e+03 1.30000e+01 2.01400e+03 5.26920e+05]
 [5.30000e+01 1.20000e+03 2.70000e+01 2.01300e+03 6.03681e+05]
 [1.90000e+01 3.66000e+02 5.00000e+00 2.01400e+03 2.47632e+05]
 [2.80000e+01 2.80000e+02 5.00000e+00 2.01300e+03 2.29054e+05]
 [6.20000e+01 1.09100e+03 1.00000e+01 2.01500e+03 5.13023e+05]
 [3.20000e+01 6.00000e+02 6.00000e+00 2.01000e+03 2.88882e+05]
 [7.00000e+01 9.08000e+02 1.00000e+01 2.01400e+03 6.20577e+05]
 [8.00000e+01 1.39900e+03 1.20000e+01 2.01100e+03 5.07948e+05]
 [4.70000e+01 7.00000e+02 6.00000e+00 2.01400e+03 3.91094e+05]
 [8.80000e+01 1.09500e+03 1.50000e+01 2.01400e+03 4.44104e+05]
 [5.20000e+01 4.39000e+02 5.00000e+00 2.01400e+03 3.04224e+05]
 [4.30000e+01 5.44000e+02 6.00000e+00 2.01400e+03 3.10335e+05]
 [7.00000e+01 1.19000e+02 1.00000e+01 2.01500e+03 3.49062e+05]
 [2.40000e+01 4.82000e+02 5.00000e+00 2.01400e+03 3.43827e+05]
 [5.10000e+01 1.73000e+03 7.00000e+00 2.01400e+03 6.77433e+05]
 [2.40000e+01 5.30000e+02 8.00000e+00 2.01100e+03 3.47855e+05]
 [4.50000e+01 8.50000e+02 7.00000e+00 2.01300e+03 3.92516e+05]
 [3.00000e+01 4.00000e+02 5.00000e+00 2.01400e+03 3.17470e+05]
 [9.00000e+01 7.21000e+02 1.30000e+01 2.01500e+03 6.67167e+05]
 [3.80000e+01 5.30000e+02 7.00000e+00 2.01000e+03 2.46388e+05]
 [7.40000e+01 1.67500e+03 1.10000e+01 2.01400e+03 7.05904e+05]
 [2.60000e+01 4.62000e+02 8.00000e+00 2.01400e+03 3.49523e+05]
 [7.00000e+01 8.70000e+02 1.10000e+01 2.01000e+03 3.50214e+05]
 [4.00000e+01 8.70000e+02 1.00000e+01 2.01400e+03 3.97017e+05]
 [8.80000e+01 1.02740e+03 9.00000e+00 2.01400e+03 6.38823e+05]
 [5.00000e+01 1.02000e+03 9.00000e+00 2.01000e+03 3.06053e+05]
 [8.80000e+01 1.09500e+03 6.00000e+00 2.01400e+03 4.14148e+05]
 [5.72000e+01 1.21000e+03 1.30000e+01 2.01400e+03 5.63805e+05]
 [3.50000e+01 3.77000e+02 6.00000e+00 2.01200e+03 2.69297e+05]
 [5.00000e+01 8.70000e+02 1.30000e+01 2.01400e+03 3.79835e+05]
 [7.37000e+01 1.26500e+03 1.00000e+01 2.01100e+03 5.00766e+05]
 [5.30000e+01 1.32500e+03 1.10000e+01 2.01300e+03 6.23674e+05]
 [6.80000e+01 6.64000e+02 7.00000e+00 2.01400e+03 3.96737e+05]
 [3.20000e+01 6.30000e+02 6.00000e+00 2.01400e+03 3.53089e+05]
 [2.80000e+01 2.80000e+02 5.00000e+00 2.01500e+03 2.85292e+05]
 [4.00000e+01 1.00000e+03 3.00000e+00 2.01400e+03 4.27421e+05]
 [3.10000e+01 7.74000e+02 1.10000e+01 2.01100e+03 3.82645e+05]
 [6.20000e+01 1.29000e+03 1.30000e+01 2.01500e+03 6.30254e+05]
 [3.08000e+01 3.08000e+02 5.00000e+00 2.01500e+03 3.05263e+05]
 [2.90000e+01 3.30000e+02 6.00000e+00 2.01200e+03 2.24449e+05]
 [3.70000e+01 4.17000e+02 7.00000e+00 2.01000e+03 2.67104e+05]
 [4.10000e+01 8.50000e+02 8.00000e+00 2.01400e+03 4.30067e+05]
 [4.10000e+01 5.32000e+02 8.00000e+00 2.01200e+03 2.50097e+05]
 [1.10000e+02 1.62910e+03 1.50000e+01 2.01400e+03 6.59620e+05]
 [3.80000e+01 1.03300e+03 6.00000e+00 2.01400e+03 3.64033e+05]
 [3.20000e+01 7.65000e+02 8.00000e+00 2.01100e+03 2.76584e+05]
 [5.83000e+01 6.27000e+02 9.00000e+00 2.01400e+03 4.66561e+05]
 [2.80000e+01 2.80000e+02 5.00000e+00 2.01500e+03 2.66404e+05]
 [2.00000e+01 3.90000e+02 5.00000e+00 2.01400e+03 2.26870e+05]
 [5.06000e+01 5.17000e+02 7.00000e+00 2.01400e+03 3.33277e+05]
 [6.16000e+01 2.01520e+03 3.00000e+00 2.01400e+03 6.45995e+05]
 [7.70000e+01 1.39300e+03 1.70000e+01 2.01400e+03 7.01507e+05]
 [4.50000e+01 6.10000e+02 7.00000e+00 2.01300e+03 3.10025e+05]
 [5.10000e+01 3.12000e+02 7.00000e+00 2.01300e+03 2.53404e+05]
 [3.60000e+01 7.50000e+02 8.00000e+00 2.01400e+03 3.34916e+05]
 [4.18000e+01 5.83000e+02 7.00000e+00 2.01000e+03 2.63636e+05]
 [3.74000e+01 5.41200e+02 5.00000e+00 2.01400e+03 3.62775e+05]
 [5.60000e+01 1.83200e+03 3.00000e+00 2.01400e+03 6.03733e+05]
 [5.20000e+01 1.39300e+03 1.30000e+01 2.01400e+03 5.88634e+05]
 [5.60000e+01 8.50000e+02 8.00000e+00 2.01100e+03 3.85871e+05]
 [4.60000e+01 1.39000e+03 1.00000e+01 2.01400e+03 5.28668e+05]
 [5.10000e+01 3.59000e+02 7.00000e+00 2.01300e+03 3.13156e+05]
 [5.80000e+01 1.31000e+03 9.00000e+00 2.01100e+03 5.01687e+05]
 [7.37000e+01 1.26500e+03 1.10000e+01 2.01100e+03 4.58295e+05]
 [4.60000e+01 4.71000e+02 7.00000e+00 2.01500e+03 3.86043e+05]
 [5.00000e+01 6.00000e+02 1.10000e+01 2.01100e+03 3.13996e+05]
 [9.68000e+01 1.20450e+03 6.00000e+00 2.01400e+03 4.43139e+05]
 [2.70000e+01 4.77000e+02 5.00000e+00 2.01000e+03 2.25198e+05]
 [5.83000e+01 1.32000e+03 2.70000e+01 2.01300e+03 6.45938e+05]
 [5.00000e+01 3.10000e+02 7.00000e+00 2.01500e+03 3.46180e+05]
 [2.70000e+01 2.99000e+02 6.00000e+00 2.01400e+03 2.68368e+05]
 [3.90000e+01 5.05000e+02 8.00000e+00 2.01400e+03 3.28105e+05]
 [3.40000e+01 4.00000e+02 4.00000e+00 2.01400e+03 2.65775e+05]
 [2.50000e+01 6.44000e+02 8.00000e+00 2.01400e+03 3.31076e+05]
 [2.50000e+01 5.30000e+02 4.00000e+00 2.01400e+03 3.03024e+05]
 [4.10000e+01 3.21000e+02 5.00000e+00 2.01400e+03 2.40469e+05]
 [7.60000e+01 1.30000e+03 1.20000e+01 2.01400e+03 5.92582e+05]
 [2.75000e+01 5.83000e+02 4.00000e+00 2.01400e+03 3.24236e+05]
 [2.70000e+01 5.07000e+02 7.00000e+00 2.01400e+03 2.84942e+05]
 [3.08000e+01 3.08000e+02 5.00000e+00 2.01500e+03 2.85052e+05]
 [3.70000e+01 7.50000e+02 6.00000e+00 2.01100e+03 2.69103e+05]
 [2.97000e+01 4.40000e+02 7.00000e+00 2.01400e+03 3.08403e+05]
 [3.00000e+01 7.79000e+02 3.00000e+00 2.01400e+03 3.21717e+05]
 [4.95000e+01 6.93000e+02 7.00000e+00 2.01300e+03 3.46361e+05]
 [7.10000e+01 9.56000e+02 9.00000e+00 2.01000e+03 3.97841e+05]
 [5.60000e+01 7.00000e+02 9.00000e+00 2.01500e+03 3.87368e+05]
 [4.29000e+01 5.55500e+02 8.00000e+00 2.01400e+03 3.51073e+05]
 [2.30000e+01 7.95000e+02 5.00000e+00 2.01400e+03 3.63098e+05]
 [3.40000e+01 8.70000e+02 1.00000e+01 2.01400e+03 4.02796e+05]
 [3.20000e+01 2.51000e+02 4.00000e+00 2.01400e+03 2.57528e+05]
 [2.40000e+01 7.79000e+02 4.00000e+00 2.01400e+03 4.01454e+05]
 [2.20000e+01 4.29000e+02 5.00000e+00 2.01400e+03 2.42751e+05]
 [2.80000e+01 3.27000e+02 5.00000e+00 2.01400e+03 3.02181e+05]
 [9.70000e+01 1.14000e+03 4.00000e+00 2.01400e+03 5.51958e+05]]


w2 5 variable 
[4.50000e+01 6.03000e+02 6.00000e+00 2.01400e+03 3.11572e+05]

w3 5 x 112 variable with 0's

1 Ответ

1 голос
/ 07 апреля 2020

Полагаю, это должно быть:

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. Поэтому я бы порекомендовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...