我正在尝试计算张量产品(更新:我想要的实际上称为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))
这两者都不是我想要的。
还有许多类似于这个问题的其他问题,但是其中提出的问题没有奏效(或者我错过了那些有效的问题)。也许“张量产品”意味着与我想象的略有不同;但上面的例子应该说清楚。
答案 0 :(得分:3)
从this和this问题的答案中,我了解了您想要的内容,称为“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))