I have a tensor A=torch.rand(1,512,100)
where 100
is the duration/time in my tensor.
I have another variable T
that shows the duration for me, e.g., T=torch.tensor([[20,30,40,10]])
.
I would like to compute the average of the elements in A
based on the durations in T
so the output will be in shape of A.shape[0],A,shape[1],T.shape[2]
.
in other words, I want to do:
A=torch.rand(1,512,100)
T=torch.tensor([[20,30,40,10]])
T_cumsum =torch.cumsum(T,dim=1)
results = torch.zeros(A.shape[0],A.shape[1],T.shape[1])
results[:,:,0] = A[:,:,0:T_cumsum [0,0]].mean(2)
results[:,:,1] = A[:,:,T_cumsum [0,0]:T_cumsum [0,3]].mean(2)
results[:,:,2] = A[:,:,T_cumsum [0,1]:T_cumsum [0,2]].mean(2)
results[:,:,3] = A[:,:,T_cumsum [0,2]:].mean(2)
is there a way to do it (without for loops) so I can do it automatically for when T
has different length in dimension 1? i.e. one time T
can be T=torch.tensor([[20,30,40,10]])
and another time T
can be T=torch.tensor([[50,50]])
, the sum of T
elements are always equal to A.shape[2]