I want to multiply two bool sparse matrices. If the two matrices become dense, it will take up a lot of space. How to multiply two bool sparse matrices?
Hello,
torch.sparse.mm
currently does not support the multiplication of boolean matrices and will fail with
RuntimeError: "sparse_matmul" not implemented for 'Bool'
Therefore, operation such as:
import torch
a = torch.tensor([[1., 0, 1], [0, 1, 0]], requires_grad=False, dtype=bool).to_sparse()
b = torch.tensor([[0, 1.], [1, 0], [0, 0]], requires_grad=False, dtype=bool).to_sparse()
y = torch.sparse.mm(a, b)
will fail.
However, you could work around this by casting your bool tensor to a different type, multiplying the tensors, and casting back to bool. For example:
import torch
a = torch.tensor([[1., 0, 1], [0, 1, 0]], requires_grad=False, dtype=bool).to_sparse()
b = torch.tensor([[0, 1.], [1, 0], [0, 0]], requires_grad=False, dtype=bool).to_sparse()
y = torch.sparse.mm(a.type(torch.FloatTensor), b.type(torch.FloatTensor)).type(torch.BoolTensor)
Of course, this requires more memory than if the operation was supported for boolean matrices. It could, however, solve your issue if your matrices are sufficiently sparse.