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))