I'm trying to make a matrix A (200, 200) where A[i][j] = A[j][i] follows Bernoulli distribution of probability p if the element is in a same cluster of index(i.e. 0-49, 50-99, 100-149, 150-199) and probability q if not.
So far I tried to implement it straightforwardly like below,
import numpy as np
from scipy.stats import bernoulli
def link_weight(p=0.05, q=0.04):
    A = np.zeros((200, 200))
    for i in range(len(A)):
        for j in range(len(A)):
            if i == j:
                A[i][j] = 0
            elif i < j:
                if i < 50:
                    if j < 50:
                        A[i][j] = bernoulli.rvs(p)
                        A[j][i] = bernoulli.rvs(p)
                    else:
                        A[i][j] = bernoulli.rvs(q)
                        A[j][i] = bernoulli.rvs(q)
                if 50 <= i <= 99:
                    if 50 <= j <= 99:
                        A[i][j] = bernoulli.rvs(p)
                        A[j][i] = bernoulli.rvs(p)
                    else:
                        A[i][j] = bernoulli.rvs(q)
                        A[j][i] = bernoulli.rvs(q)
                if 100 <= i <= 149:
                    if 100 <= j <= 149:
                        A[i][j] = bernoulli.rvs(p)
                        A[j][i] = bernoulli.rvs(p)
                    else:
                        A[i][j] = bernoulli.rvs(q)
                        A[j][i] = bernoulli.rvs(q)
                if 150 <= i <= 199:
                    if 150 <= j <= 199:
                        A[i][j] = bernoulli.rvs(p)
                        A[j][i] = bernoulli.rvs(p)
                    else:
                        A[i][j] = bernoulli.rvs(q)
                        A[j][i] = bernoulli.rvs(q)
    return A
But I wanna make it more readable and faster. How can I prove this code by avoiding nested if/for loops?