NumPy Tensor / Kronecker矩阵产品出现了洗牌

时间:2014-09-08 04:58:04

标签: python numpy matrix

我正在尝试计算张量产品(更新:我想要的实际上称为Kronecker product,这种命名混淆是我无法找到{{1}的原因多个矩阵,以便我可以将变换应用于矢量,这些矢量本身就是多个矢量的张量积。我正在遇到麻烦,正确地展平了结果。

例如,假设我想计算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| |

不幸的是,我尝试的所有内容要么无法压平矩阵,要么将其压平太多或者置换条目以使某些列为空。更具体地说,是python程序的输出:

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

这两者都不是我想要的。

还有许多类似于这个问题的其他问题,但是其中提出的问题没有奏效(或者我错过了那些有效的问题)。也许“张量产品”意味着与我想象的略有不同;但上面的例子应该说清楚。

1 个答案:

答案 0 :(得分:3)

thisthis问题的答案中,我了解了您想要的内容,称为“Kronecker product”。它实际上内置于Numpy中,所以只需:

np.kron(flip, flip)

但是如果你想使reshape方法有效,首先要重新排列张量中的行:

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