Не путайте значение измерения, используемого в математике, с измерением в numpy.
Ваша первая матрица имеет форму (5,3), это правильно. И он имеет размерность 2.
Второй вектор не является матрицей 3x1 для numpy. Он имеет форму (3,) и размерность 1:
wb0 = np.array([ 1.0, 1.0, 1.0])
Эквивалентная матрица 3x1 для numpy будет выглядеть следующим образом:
wb1 = numpy.array([[1.0], [1.0], [1.0]])
print(wb1)
print("shape wb1",wb1.shape)
Как вы можете видеть Здесь у нас есть два измерения для wb1
по сравнению с wb0
. Хотя wb0
выглядит как матрица 3x1, для numpy это матрица (3,).
Матрица 1x3 wb01
будет выглядеть следующим образом:
wb2 = numpy.array([[1.0, 1.0, 1.0]])
print(wb2)
print("shape wb0",wb2.shape)
Таким образом, размерность и формы в numpy отличаются от размерности, используемой для матрицы в общей алгебре. Очень подробное объяснение можно найти в следующей ветке: Разница между numpy .изображением массива (R, 1) и (R,)
В вашем случае причина в том, что numpy может сделать умножение матриц между матрицей (5,3) и матрицей (3,) реализацией функции dot :
Если a массив ND, а b - это одномерный массив, это сумма произведений по последней оси a и b.
Вы бы получили тот же результат, если бы использовали функцию точки для (5 , 3) матрица и (3,1) матрица:
import numpy
X = numpy.array([[4.6, 3.4, 1.4],
[6.5, 3.2, 5.1],
[5.7, 2.9, 4.2],
[6.6, 3., 4.4],
[6., 2.9, 4.5]])
print(X)
print(X.shape)
print("")
wb0 = numpy.array([0.0, 1.0, 1.0, 1.0])
print(wb0)
print("shape wb0",wb0.shape)
print()
w = numpy.array([[1.0], [1.0], [1.0]])
print(w)
print("shape w",w.shape)
print("")
print(numpy.dot(X,w))
Единственное отличие состоит в том, что в вашем случае конечный результат имеет форму (5,), а во втором случае результат будет иметь форма (5,1).