NumPy张量/矩阵的克罗内克积结果乱序
我正在尝试计算多个矩阵的 张量积(更新一下,我想要的其实是叫做 克罗内克积,这个名字的混淆让我找不到 np.kron
),这样我就可以对那些本身是多个向量的张量积的向量进行变换。不过,我在正确地将结果压平时遇到了麻烦。
举个例子,假设我想计算 [[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 |
不幸的是,我尝试的所有方法都要么没能正确压平矩阵,要么压平得太过了,或者把元素的顺序搞乱了,导致某些列变成空的。更具体来说,下面这个 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))
是
[[[[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]]
这两者都不是我想要的结果。
还有很多其他类似的问题,但里面建议的方法都没有奏效(或者我可能错过了那些有效的方法)。也许“张量积”的意思和我想的稍微有点不同;不过上面的例子应该能让人明白我的意思。