是否可以在 torch.sparse 张量中使用与“tensordot”类似的方法?
我正在尝试将 4 维张量应用于 2 维张量。这可以使用 torch 或 numpy 来实现。但是,在不使用“.to_dense()”使稀疏张量密集的情况下,我没有找到使用 torch.sparse 的方法。
更准确地说,这是我想要在不使用“.to_dense()”的情况下做的事情:
import torch
import torch.sparse
nb_x = 4
nb_y = 3
coordinates = torch.LongTensor([[0,1,2],[0,1,2],[0,1,2],[0,1,2]])
values = torch.FloatTensor([1,2,3])
tensor4D = torch.sparse.FloatTensor(coordinates,values,torch.Size([nb_x,nb_y,nb_x,nb_y]))
inp = torch.rand((nb_x,nb_y))
#what I want to do
out = torch.tensordot(tensor4D.to_dense(),inp,dims=([2,3],[0,1]))
print(inp)
print(out)
(这里是输出:torch_code)
或者,这是使用 numpy 的类似代码:
import numpy as np
tensor4D = np.zeros((4,3,4,3))
tensor4D[0,0,0,0] = 1
tensor4D[1,1,1,1] = 2
tensor4D[2,2,2,2] = 3
inp = np.random.rand(4,3)
out = np.tensordot(tensor4D,inp)
print(inp)
print(out)
(这里是输出:numpy_code)
感谢您的帮助!