N = 100
# Plot a square of NxN small other squares.
# Each one has a probability Pxi/N of being coloured, where i is the line where it stands.
P = 0.5
im_size = 5
image = np.repeat(np.array(range(1,N+1)).reshape(N, 1), N, axis=1)
# LESS understandable but executing FASTER
image = (P/N * image) <= np.random.rand(N,N)
# MORE understandable but executing SLOWER
def bernoulli(num, P, N):
return 1-np.random.binomial(1, P*num/N)
vfunc = np.vectorize(bernoulli)
image = vfunc(image, P, N)
plt.figure(figsize=(im_size, im_size))
plt.imshow(image, cmap='gray')
plt.show()