我有N个向量的数组,每个向量的大小为3:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]]
需要找到每个向量与其自身的点积。
因此,结果将是形状(N,3,3)的3维数组。一种方法是使用以下for循环:
for vector in np.arange(15).reshape(-1,3):
np.outer(vector, vector)
由于数组可以任意大,所以我需要找到一个矢量化的解决方案。
答案 0 :(得分:2)
您没有对任何轴求和,是吗?只是一个“划痕的”外部?
In [115]: arr=np.arange(15).reshape(5,3)
In [116]: arr[:,:,None]*arr[:,None,:] #using broadcasting
Out[116]:
array([[[ 0, 0, 0],
[ 0, 1, 2],
[ 0, 2, 4]],
[[ 9, 12, 15],
[ 12, 16, 20],
[ 15, 20, 25]],
[[ 36, 42, 48],
[ 42, 49, 56],
[ 48, 56, 64]],
[[ 81, 90, 99],
[ 90, 100, 110],
[ 99, 110, 121]],
[[144, 156, 168],
[156, 169, 182],
[168, 182, 196]]])
In [117]: _.shape
Out[117]: (5, 3, 3)
arr[:,:,None]@arr[:,None,:]
做同样的事情,对那个大小为1的“虚拟”维度求和。