#python #numpy #valueerror
#python #numpy #ошибка значения
Вопрос:
Я написал эту функцию:
def update_parameters(t0, t1, lrate, x_matrix, x_vector, y_vector):
# Create a 2x1 dimensional vector with t0 and t1
hypothesis_vector = np.r_['c', [t0, t1]]
prediction_vector = np.dot(x_matrix, hypothesis_vector)
error_vector = np.subtract(prediction_vector, y_vector)
# Debugging, remove later
print(f'Dimensions: {np.ndim(error_vector)}, {np.ndim(x_vector)}')
print(f'Shape: {error_vector.shape}, {x_vector.shape}')
print(f'Length: {len(error_vector)}, {len(x_vector)}')
derivative_vector = error_vector * x_vector
# Calculate partial derivative of cost function.
t0_derivative = np.sum(error_vector)
t0 = t0 - (t0_derivative * lrate)
t1_derivative = np.sum(derivative_vector)
t1 = t1 - (t1_derivative * lrate)
return t0, t1
И когда я запустил его, я получил эту трассировку:
ValueError Traceback (most recent call last)
<ipython-input-114-10848703fdbf> in <module>
----> 1 test = update_parameters(0, 1, 0.5, trainset_x_matrix, trainset_x_vector, trainset_y_vector)
2 print(test)
<ipython-input-113-6c8da5390608> in update_parameters(t0, t1, lrate, x_matrix, x_vector, y_vector)
26 print(f'Length: {len(error_vector)}, {len(x_vector)}')
27
---> 28 derivative_vector = error_vector * x_vector
29
30 # Calculate partial derivative of cost function.
/opt/conda/lib/python3.7/site-packages/numpy/matrixlib/defmatrix.py in __mul__(self, other)
218 if isinstance(other, (N.ndarray, list, tuple)) :
219 # This promotes 1-D vectors to row vectors
--> 220 return N.dot(self, asmatrix(other))
221 if isscalar(other) or not hasattr(other, '__rmul__') :
222 return N.dot(self, other)
<__array_function__ internals> in dot(*args, **kwargs)
ValueError: shapes (101,1) and (101,1) not aligned: 1 (dim 1) != 101 (dim 0)
Я написал несколько операторов печати, чтобы получить размеры обоих x_vector
и error_vector
и получил этот результат:
Dimensions: 2, 2
Shape: (101, 1), (101, 1)
Length: 101, 101
и они кажутся одинаковыми. Почему он говорит, что они не выровнены? Когда я искал эту ошибку, это было для людей, которые работали с матрицами с разными размерами. Я в замешательстве, и любая помощь будет высоко оценена.
Комментарии:
1.
np.dot
это матричное умножение. Помните, как в старших классах школы или колледжа вы водили пальцем по строкам одной матрицы и вниз по столбцам другой? Ознакомьтесь с документацией дляnp.dot
!2. Я не пытаюсь сделать точку, предполагалось, что это будет поэлементное умножение. Является ли то, что я сделал неправильно?
3. Упс, я пропустил тот факт, что
dot
находится вnp.matrix
вычислении. Дляnp.matrix
массивов подклассов —*
этоdot
. Почему у вас есть массивы np.matrix? numpy.org/doc/stable/reference/generated/numpy.matrix.html