Ваши массивы:
In [24]: A = np.matrix( [ [4, 1, 0, 0], [1, 5, 1, 0], [0, 1, 6, 1], [1, 0, 1, 4] ] )
...: x = np.array([0, 0, 0, 0])
In [25]: A.shape
Out[25]: (4, 4)
In [26]: x.shape
Out[26]: (4,)
Точка:
In [27]: np.dot(A,x)
Out[27]: matrix([[0, 0, 0, 0]]) # (1,4) shape
Давайте попробуем то же самое, но с ndarray
версией A
:
In [30]: A.A
Out[30]:
array([[4, 1, 0, 0],
[1, 5, 1, 0],
[0, 1, 6, 1],
[1, 0, 1, 4]])
In [31]: np.dot(A.A, x)
Out[31]: array([0, 0, 0, 0])
Результат - (4,) форма. Это имеет смысл: (4,4) точка (4,) => (4,)
np.dot(A,x)
выполняет те же вычисления, но возвращает np.matrix
. По определению это двумерный массив, поэтому (4,) расширяется до (1,4).
У меня нет более старой версии, чтобы проверить это, и я не знаю о каких-либо изменениях.
Если x
- матрица (4,1), то результат (4,4) точка (4,1) => (4,1):
In [33]: np.matrix(x)
Out[33]: matrix([[0, 0, 0, 0]])
In [34]: np.dot(A, np.matrix(x).T)
Out[34]:
matrix([[0],
[0],
[0],
[0]])