How to caculate the distances between each vector without "for" iterator

Assume that V is a Variable of size (10,6). I need to calculate the distances (e.g. the euclidean distance) between each row-vector contained in V, and store the 10-by-10 result into D. Is it possible to manage that operation without the “for” iterator?

At the expense of memory, you can do
((v.unsqueeze (0)-v.unsqueeze (1))**2).sum (2)**0.5.
This works on master, on 0.1.12 you would need to throw in .expand (10,10,6) after the unsqueezes.

Best regards


1 Like

Would the following work? Would it use less memory?

TwoAB = 2 * A @ B.transpose(0,1)
print(torch.sqrt(torch.sum(A * A, 1).expand_as(TwoAB) + torch.sum(B * B, 1).transpose(0,1).expand_as(TwoAB) - TwoAB))

(here A is one matrix, and B is the other. In this thread’s case, they’d both be V)

1 Like