Random Block Solution¶
import torch
import random
random.seed(123)
foo = torch.zeros(size=(10,10), dtype=torch.int32)
i, j = random.randint(0, 7), random.randint(0, 7)
foo[i:(i+3), j:(j+3)] = 1
Explanation¶
-
Instantiate a 10x10 tensor of 32-bit integer 0s.
foo = torch.zeros(size=(10,10), dtype=torch.int32) print(foo) # tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=torch.int32)By default,
torch.zeros()creates floats, so we explicitly tell it to use 32-bit integers withdtype=torch.int32. -
Randomly choose the top-left cell of the 3x3 block.
We choose random a random (i,j) element such that the entire 3x3 block will fit inside
foo.import random random.seed(123) i, j = random.randint(0, 7), random.randint(0, 7) print(i) # 0 print(j) # 4 -
Select the 3x3 block and update 0s to 1s.
foo[i:(i+3), j:(j+3)] = 1 print(foo) # tensor([[0, 0, 0, 0, 1, 1, 1, 0, 0, 0], # [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], # [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=torch.int32)
Bonus
We can plot the array as an image using matplotlib.pyplot.imshow() with cmap='gray'.
import matplotlib.pyplot as plt
plt.imshow(foo, cmap='gray')
