gpt4 book ai didi

python - 矩阵的 NumPy Tensor/Kronecker 乘积被打乱

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:11 24 4
gpt4 key购买 nike

我正在尝试计算张量积(更新:我想要的实际上叫做 Kronecker product ,这种命名困惑是我找不到 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]]

这两个都不是我想要的。

还有很多其他问题与此问题类似,但其中建议的内容并没有奏效(或者我可能错过了那些有用的问题)。也许“张量积”的含义与我想象的略有不同;但上面的例子应该很清楚。

最佳答案

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

关于python - 矩阵的 NumPy Tensor/Kronecker 乘积被打乱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25717686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com