我有一个在numpy中乘以矩阵的具体问题。 下面是一个例子:numpy tensordot相关问题
P=np.arange(30).reshape((-1,3))
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23],
[24, 25, 26],
[27, 28, 29]])
欲通过它的转置,以便获得3×3矩阵的每一行, 例如用于第一行相乘的每一行:
P[0]*P[0][:,np.newaxis]
array([[0, 0, 0],
[0, 1, 2],
[0, 2, 4]])
和存储结果在3 d矩阵M:
M=np.zeros((10,3,3))
for i in range(10):
M[i] = P[i]*P[i][:,np.newaxis]
我觉得可能是一个办法做到这一点不循环,可能与张量点,但无法找到它。
有人有想法吗?
太棒了,正是我在找的东西,有没有一种简单的方法来理解我应该用None来扩展哪个索引? – 2011-03-08 16:58:29
@Andrea Z:对于这样的方法论,我会先试着弄清楚'numpy'广播是如何运作的。然后,只是意识到你正在寻找一个'形状=(10,3,3)',或多或少'自然'地发现'(P [:,,无] * P [:,无, :])。shape ==(10,3,3)'。也许不是一个最好的描述,但我主要的观点是;熟悉广播如何工作。现在随意问'关于广播的内部'的其他问题!谢谢 – eat 2011-03-08 18:24:31