我从一个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)
,但是它没有满足我的要求……还有其他想法吗?
答案 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. ]]