Фигуры, не выровненные в numpy ValueError, когда обе матрицы имеют одинаковые размеры

#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