def generate_zip_state_data(means, weights, z):
x_true = np.dot(means, weights)<EOL>sample = np.random.poisson(x_true)<EOL>random = np.random.random(x_true.shape)<EOL>x_true[random < z] = <NUM_LIT:0><EOL>return sample.astype(float)<EOL>
Generates data according to the Zero-inflated Poisson Convex Mixture Model.

Args:
    means (array): Cell types- genes x clusters
    weights (array): Cell cluster assignments- clusters x cells
    z (float): zero-inflation parameter

Returns:
    data matrix - genes x cells