我试图在nx3向量中取出每一行相对于自身的点积。让我更好地解释一下:我需要从nx3到nx3x3数组。
如果我具有以下条件:
A = np.array([[1, 2, 2],
[4, 2, 3])
我想得到的是这样:
第一个元素:
np.dot(A[0].reshape(3,1), A[0].reshape(1,3)) = array([[1, 2, 2], [2, 4, 4], [2, 4, 4]])
第二个元素:
np.dot(A[1].reshape(3,1), A[1].reshape(1,3)) = array([[16, 8, 12], [8, 4, 6], [12, 6, 9]])
所以我的最终数组将是:
result = array([[[ 1, 2, 2],
[ 2, 4, 4],
[ 2, 4, 4]],
[[16, 8, 12],
[ 8, 4, 6],
[12, 6, 9]])
result.shape = (2, 3, 3)
我知道我可以使用for循环来做到这一点,但我想必须有一种更快,更直接地做到这一点的方法。速度对于我所需要的至关重要。
希望我对自己的解释足够正确。预先谢谢你。
答案 0 :(得分:1)
In [301]: A = np.array([[1, 2, 2],
...: [4, 2, 3]])
...:
...:
这不是dot
产品;没有产品的总和。相反,它更像是outer
产品,增加了尺寸。 numpy
可以很好地做到这一点:
In [302]: A[:,:,None]*A[:,None,:]
Out[302]:
array([[[ 1, 2, 2],
[ 2, 4, 4],
[ 2, 4, 4]],
[[16, 8, 12],
[ 8, 4, 6],
[12, 6, 9]]])