如何在Python中“拉平”张量积矩阵?

时间:2019-01-07 11:27:20

标签: python

我从一个3x3数组X_2开始,并对其张量乘积。

我得到一个3x3数组的3x3数组,但实际上我想得到一个9x9数组:

m

我尝试了import numpy as np m = np.array([[1. , 0.5, 0. ], [0.5, 1. , 0.5], [0. , 0.5, 1. ]]) a = np.tensordot(m,m, axes=0) ,但是它没有满足我的要求……还有其他想法吗?

2 个答案:

答案 0 :(得分:2)

我不确定我是否正确理解了问题,但我认为您可能想要的是:

import numpy as np

m = np.array([[1. , 0.5, 0. ], [0.5, 1. , 0.5], [0. , 0.5, 1. ]])
a = np.tensordot(m, m, axes=0)
a = a.transpose((0, 2, 1, 3)).reshape((9, 9))
print(a)

输出:

[[1.   0.5  0.   0.5  0.25 0.   0.   0.   0.  ]
 [0.5  1.   0.5  0.25 0.5  0.25 0.   0.   0.  ]
 [0.   0.5  1.   0.   0.25 0.5  0.   0.   0.  ]
 [0.5  0.25 0.   1.   0.5  0.   0.5  0.25 0.  ]
 [0.25 0.5  0.25 0.5  1.   0.5  0.25 0.5  0.25]
 [0.   0.25 0.5  0.   0.5  1.   0.   0.25 0.5 ]
 [0.   0.   0.   0.5  0.25 0.   1.   0.5  0.  ]
 [0.   0.   0.   0.25 0.5  0.25 0.5  1.   0.5 ]
 [0.   0.   0.   0.   0.25 0.5  0.   0.5  1.  ]]

答案 1 :(得分:1)

numpy.kron似乎正是您想要的。

import numpy as np

m = np.array([[1. , 0.5, 0. ], [0.5, 1. , 0.5], [0. , 0.5, 1. ]])
print(np.kron(m,m))

输出:

[[1.   0.5  0.   0.5  0.25 0.   0.   0.   0.  ]
 [0.5  1.   0.5  0.25 0.5  0.25 0.   0.   0.  ]
 [0.   0.5  1.   0.   0.25 0.5  0.   0.   0.  ]
 [0.5  0.25 0.   1.   0.5  0.   0.5  0.25 0.  ]
 [0.25 0.5  0.25 0.5  1.   0.5  0.25 0.5  0.25]
 [0.   0.25 0.5  0.   0.5  1.   0.   0.25 0.5 ]
 [0.   0.   0.   0.5  0.25 0.   1.   0.5  0.  ]
 [0.   0.   0.   0.25 0.5  0.25 0.5  1.   0.5 ]
 [0.   0.   0.   0.   0.25 0.5  0.   0.5  1.  ]]