I want to generate a 0-1 random matrix with certain number but random indexes. However, i don’t know how to control the number of random matrix.
Could you post a small example how your matrix should look like?
You can create a tensor with random values using e.g. this code:
torch.empty(4, 4).random_(2)
5 Likes
@ptrblck Excuse me, now i have a tensor
x = torch.rand(1, 2, 3)
and I want to generate another random mask tensor, which has k
positive elements.
The following code could solve my problem, but it is too inefficient.
n = torch.prod(torch.tensor(x.shape)).item()
index = torch.multinomial(torch.rand(n), k, replacement=False)
mask = (x * 0).flatten()
mask[index] = 1
mask = mask.reshape(*x.shape)
x.mul_(mask)
Have any suggestion?
Where is the bottleneck and how long does this approach take?
@ptrblck , thanks for your reply,. I found that mask = (x * 0).flatten()
wasted a lot of time. Then I modified my code. Now it looks like
n = torch.prod(torch.tensor(x.shape)).item()
index = np.random.randint(0, n, k)
mask = np.zeros((n,), dtype=np.float32)
mask[index] = 1
mask = mask.reshape(*x.shape)
mask = torch.from_numpy(mask)
x.mul_(mask)
The improvement in speed is obvious. I am looking for a more faster implementation…