【问题标题】:NumPy Tensor / Kronecker product of matrices coming out shuffledNumPy Tensor / Kronecker 矩阵乘积洗牌
【发布时间】:2014-11-01 06:50:06
【问题描述】:

我正在尝试计算多个的 张量积(更新:我想要的实际上称为 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]]

这两个都不是我想要的。

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

【问题讨论】:

    标签: python numpy matrix


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 2017-07-20
      • 2022-01-21
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2019-11-23
      • 1970-01-01
      相关资源
      最近更新 更多