+ self.random_start = random_start
+
+ def start_random(self, nb):
+ y = torch.arange(self.height * self.width).reshape(1, -1).expand(nb, -1)
+
+ if self.random_start:
+ i = (
+ torch.arange(self.height)
+ .reshape(1, -1, 1)
+ .expand(nb, self.height, self.width)
+ )
+ j = (
+ torch.arange(self.width)
+ .reshape(1, 1, -1)
+ .expand(nb, self.height, self.width)
+ )
+
+ ri = torch.randint(self.height, (nb,)).reshape(nb, 1, 1)
+ rj = torch.randint(self.width, (nb,)).reshape(nb, 1, 1)
+
+ m = 1 - torch.logical_or(i == ri, j == rj).long().flatten(1)
+
+ y = y * m + self.height * self.width * (1 - m)
+
+ y = y.reshape(nb, self.height, self.width)