Ответ 1
Оператор *
для массивов numpy - это умножение по элементам (аналогично произведению Адамара для массивов той же размерности), а не матрица.
Например:
>>> a
array([[0],
[1],
[2]])
>>> b
array([0, 1, 2])
>>> a*b
array([[0, 0, 0],
[0, 1, 2],
[0, 2, 4]])
Для матричного умножения с массивами numpy:
>>> a = np.ones((3,2))
>>> b = np.ones((2,4))
>>> np.dot(a,b)
array([[ 2., 2., 2., 2.],
[ 2., 2., 2., 2.],
[ 2., 2., 2., 2.]])
Кроме того, вы можете использовать класс матрицы:
>>> a=np.matrix(np.ones((3,2)))
>>> b=np.matrix(np.ones((2,4)))
>>> a*b
matrix([[ 2., 2., 2., 2.],
[ 2., 2., 2., 2.],
[ 2., 2., 2., 2.]])
Более подробную информацию о вещании массивов numpy можно найти здесь, и более подробную информацию о классе матрицы можно найти здесь.