Я пытаюсь вычислить тензорное произведение (обновление: то, что я хотел на самом деле был назван Kronecker product, и это именование путаница, почему я не мог найти np.kron
) из многократных матриц, так что я могу применить преобразования к векторам, которые сами по себе являются тензорным произведением множества векторов. У меня возникают проблемы с правильным выравниванием результата.NumPy Тензор/Кронекера произведение матриц выходит перемешиваются
Например, я хочу вычислить тензорное произведение [[0,1],[1,0]]
против себя. Результат должен быть что-то вроде:
| 0*|0,1| 1*|0,1| |
| |1,0| |1,0| |
| |
| 1*|0,1| 0*|0,1| |
| |1,0| |1,0| |
который я тогда хочу уплощаются:
| 0 0 0 1 |
| 0 0 1 0 |
| 0 1 0 0 |
| 1 0 0 0 |
К сожалению, то, что я стараюсь все либо не выравнивать матрицу или придавить его слишком много или переставлять так что некоторые столбцы пустые. Более конкретно, вывод программы питона:
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))
является
[[[[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]]
Ни один из которых является то, что я хочу.
Есть много других вопросов, подобных этому, но предлагаемые в них вещи не сработали (или, может быть, я пропустил те, которые работают). Может быть, «тензорный продукт» означает нечто несколько иное, чем я думал; но приведенный выше пример должен дать понять.