Solved by ptrblck in post #2 
              
              
                Assuming the desired output can be created via: 
res2 = []
for idx in range(w.size(0)):
    res2.append(w[idx, :, fIndex[idx]])
res2 = torch.stack(res2)

then this should work: 
res1 = w[torch.arange(w.size(0)), :, fIndex]

# compare
print((res2 == res1).all())
> tensor(True)