Поскольку A
является матрицей, Python вызывает метод A
__mul__
для вычисления A*b
с b
в качестве аргумента.То есть он вызывает A.__mul__(b)
.Numpy matrix
настаивает на том, чтобы сделать все 2-мерной матрицей, поэтому он преобразует b
в matrix
перед выполнением умножения матрицы.Когда b
преобразуется в пустую матрицу, результат имеет форму (1, 3)
:
In [248]: b
Out[248]: array([1., 1., 1.])
In [249]: np.matrix(b).shape
Out[249]: (1, 3)
Тогда __mul__
жалуется, что формы не выровнены, потому что A
имеет форму (3, 3)
ипреобразованный b
имеет форму (1, 3)
.
Один из способов исправить это - убедиться, что b
является двумерным с формой (3, 1)
перед выполнением умножения:
In [250]: b = ones((3, 1))
In [251]: A * b
Out[251]:
matrix([[1.],
[1.],
[1.]])
В долгосрочной перспективе, однако, было бы лучше изменить ваш код так, чтобы он вообще не использовал matrix
, как упомянуто @wm.