我有两个 numpy 数组,X
它们Y
的形状是X.shape == (m,d)
and Y.shape == (n,d)
, where m
,n
和d
是非平凡的大小。我需要制作第三个Z
形状为Z.shape == (m,n)
.
对于某些非线性,元素Z[i,j]
是对f(X[i,k],Y[j,k]) for k in range(d)
所有 进行求和然后求和的结果。k
f
显而易见的方法是这样做:
Z = numpy.zeros((m,n), dtype = numpy.float64)
for i in range(m):
for j in range(n):
Z[i,j] += (f(X[i,:],Y[j,:])).sum() # I can compose f from ufuncs
但我真正要问的是,是否有某种聪明的广播技巧可以用来计算Z
:
- 如果可能的话,利用 numpy 的优化
- 执行此操作而不将形状数组
(n,m,d)
放入内存(n*m
双打将适合内存,但n*m*d
双打不会)
有谁知道这样做的方法?提前致谢。