如何在 tensorflow 和/或 numpy 中有效地实现以下功能?
add_along_axis(tensor=T, vector=v, axis=k)
# T is a tensor of shape (N1,...,Nd) (unknown beforehand)
# v is a vector with N components
# k is an integer such that Nk=N
S = T+v, summed along k
return S
那是带有分量S的(N1,..,Nd)张量S[i1,...,id]=T[i1,...,id] + v[ik]
请注意,任何数量的Nj,j≠k可能巧合地等于N,因此标准广播不是一种选择。
例如:让T = np.zeros( (3,3,3) )和v = [1,2,3]那么正确的输出应该是
f(T,v,1) = [[[1., 1., 1.], [[2., 2., 2.], [[3., 3., 3.],
[1., 1., 1.], [2., 2., 2.], [3., 3., 3.],
[1., 1., 1.]], [2., 2., 2.]], [3., 3., 3.]]]
f(T,v,2) = [[[1., 1., 1.], [[1., 1., 1.], [[1., 1., 1.],
[2., 2., 2.], [2., 2., 2.], [2., 2., 2.],
[3., 3., 3.]], [3., 3., 3.]], [3., 3., 3.]]]
f(T,v,3) = [[[1., 2., 3.], [[1., 2., 3.], [[1., 2., 3.],
[1., 2., 3.], [1., 2., 3.], [1., 2., 3.],
[1., 2., 3.]], [1., 2., 3.]], [1., 2., 3.]]]
在这里,目标行为可以分别通过编写T+v[:,None,None]、T+v[None,:,None]和来实现T+v[None,None,:]。但是,我不知道这种方法在张量形状未预定义的情况下如何工作。
慕慕森
牧羊人nacy
相关分类