¿Problemas de multiplicación de matrices – Numpy vs Matlab?

Estoy intentando traducir algún código Matlab que tengo a Python (usando numpy). Tengo el siguiente código de Matlab:

(1/x)*eye(2) 

X es simplemente 1000000. Según tengo entendido, * en Matlab indica la multiplicación de matrices, y el equivalente es .dot in numpy. Así que en Python, tengo:

 numpy.array([(1/x)]).dot(numpy.identity(2)) 

Obtengo el error “formas (1,) y (2,2) no alineadas: 1 (dim 0)! = 2 (dim 0)” cuando bash ejecutar el código numpy.

Al parecer no estoy entendiendo algo. ¿Alguien sabe cuál sería el código numpy correcto?

Como x es un escalar, si multiplicas una matriz por un escalar en MATLAB, simplemente escalará todas las entradas por ese valor. No hay necesidad de multiplicar matrices.

Si desea lograr lo mismo en numpy , realice la misma operación que en MATLAB:

 (1/x)*numpy.identity(2) 

Si x es una matriz de dimensiones compatibles, entonces sí usas numpy.dot :

 (1/x).dot(numpy.identity(2)) 

Como tal, debe asegurarse de saber qué es x antes de decidir realizar la operación.

numpy realiza la multiplicación de elementos mediante el uso del operador * y, por lo tanto, si desea la multiplicación de matrices real, sí use numpy.dot . Está obteniendo dimensiones incompatibles porque la verdadera multiplicación de matrices entre un escalar y una matriz no es posible.

Básicamente en las operaciones numpy * y el punto son diferentes.

(*) realiza una operación inteligente: cada elemento de matriz con otro elemento correspondiente de matriz

a.dot (c): realiza la multiplicación matricial matemática real, que estudiamos en nuestra escuela secundaria.

 a = np.arange(9).reshape(3,3) b = np.arange(10,19).reshape(3,3) In [47]: a*b Out[47]: array([[ 0, 11, 24], [ 39, 56, 75], [ 96, 119, 144]]) In [48]: a.dot(b) Out[48]: array([[ 45, 48, 51], [162, 174, 186], [279, 300, 321]])