NumPy Tensor / Kronecker producto de matrices que salen barajadas

Estoy tratando de calcular el producto tensorial (actualización: lo que quería en realidad se llamaba el producto Kronecker , y esta confusión de nombres fue la razón por la que no pude encontrar np.kron ) de matrices múltiples, para poder aplicar transformaciones a vectores que Son en sí mismos el producto tensorial de múltiples vectores. Estoy teniendo problemas para aplanar el resultado correctamente.

Por ejemplo, digamos que quiero calcular el producto tensorial de [[0,1],[1,0]] contra sí mismo. El resultado debería ser algo como:

 | 0*|0,1| 1*|0,1| | | |1,0| |1,0| | | | | 1*|0,1| 0*|0,1| | | |1,0| |1,0| | 

que luego quiero aplanar a:

 | 0 0 0 1 | | 0 0 1 0 | | 0 1 0 0 | | 1 0 0 0 | 

Desafortunadamente, las cosas que bash no logran aplanar la matriz o aplanarla demasiado o permutar las entradas para que algunas columnas estén vacías. Más específicamente, la salida del progtwig python:

 import numpy as np flip = np.matrix([[0, 1], [1, 0]]) print np.tensordot(flip, flip, axes=0) print np.reshape(np.tensordot(flip, flip, axes=0), (4, 4)) 

es

 [[[[0 0] [0 0]] [[0 1] [1 0]]] [[[0 1] [1 0]] [[0 0] [0 0]]]] [[0 0 0 0] [0 1 1 0] [0 1 1 0] [0 0 0 0]] 

Ninguno de los cuales es lo que quiero.

Hay muchas otras preguntas similares a esta, pero las cosas sugeridas en ellas no han funcionado (o tal vez extrañé las que funcionan). Tal vez “producto tensorial” significa algo ligeramente diferente de lo que pensaba; pero el ejemplo anterior debe dejarlo claro.

De las respuestas a esta y esta pregunta, aprendí que lo que quiere se llama ” producto de Kronecker “. En realidad está integrado en Numpy, así que hazlo:

 np.kron(flip, flip) 

Pero si desea que el enfoque de reshape funcione, primero reorganice las filas en el tensor:

 flip = [[0,1],[1,0]] tensor4d = np.tensordot(flip, flip, axes=0) print tensor4d.swapaxes(2, 1).reshape((4,4))