Прежде всего, для класса матрицы:
Примечание:
Больше не рекомендуется использовать этот класс, даже для линейной алгебры. Вместо этого используйте обычные массивы. Класс может быть удален в будущем.
https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html
Это потому, что первый элемент в точечном произведении имеет матричный тип, и, следовательно, вы получаете матрицу в качестве вывода. Но если вы используете shape method
, чтобы получить «реальный» размер вашей матрицы, вы получите согласованный результат:
import numpy as np
a=[[1,2],
[3,4],
[5,6]]
e=np.array([1,2])
b=np.array(a)
print("Ndarrray:%s"%(type(b)))
print(b)
print("Dim of ndarray %d"%(np.ndim(b)))
be=np.dot(b,e)
print(be)
print("Dim of array*array %d\n"%(np.ndim(be)))
c=np.mat(a)
print("Matrix:%s"%(type(c)))
print(c)
print("Dim of matrix %d"%(np.ndim(c)))
ce=np.dot(c,e)
print(ce)
print("Dim of matrix*array %d"%(np.ndim(ce)))
print("Dim of matrix*array ",(ce.shape)) # -> ('Dim of matrix*array ', (1, 3))
print(type(ce)) # <class 'numpy.matrixlib.defmatrix.matrix'>
У вас есть матрица формы (1,3)
, которая на самом деле является вектором (dim 1, потому что у вас есть 1 строка и 3 столбца)
По сути, чтобы получить размеры экземпляра матрицы, вы должны использовать shape
, а не ndim
Чтобы сделать его более понятным,если вы определяете пустую матрицу, вы получаете по умолчанию всегда 2 дим:
c=np.mat([])
print(c.ndim) # 2
Возможно, это было задумано таким образом, потому что мы начинаем говорить о матрице, когда у нас есть по крайней мере 2 дим