Create Array with Binomial Values (Most Time Efficient) based on conditions

binomial distribution
binomial random variable example problems
numpy vectorize
binomial random variable definition
generate a binomial distribution in python
binomial probability
binomial distribution questions
numpy array

Currently I am working on a project that involves creating an array with 10 binomial values 0 and 1 and a given success rate (= ci_rate[i]/1'000).

Due to the fact that the rate is different for each of the 10 years, I run a loop 10 times that is creating 20'000 binomial values each time (for 20'000 scenarios).

The success rate for the binomial values is very small, but is an absorbing state for the following years. Simplified for only 10 scenarios and 10 years I would like to output the following:

[1,0,0,0,0,0,0,0,0,0]
[1,0,0,0,0,0,0,1,0,0]
[1,0,0,1,0,0,0,1,0,0]
[1,0,0,1,0,0,0,1,0,0]
[1,0,0,1,0,0,0,1,0,0]
[1,0,0,1,0,0,0,1,0,0]
[1,0,0,1,0,1,0,1,0,0]
[1,0,0,1,0,1,0,1,0,0]
[1,0,0,1,0,1,0,1,0,0]
[1,0,0,1,0,1,0,1,0,0]

Currently I am solving the problem in this way:

for j in range(20000):
    tem = np.zeros(len(ci_rate))
    for i in range(len(ci_rate)):
        if i == 0:
            tem[0] = (np.random.binomial(1, p = ci_rate[i] / 1000))
        else:
            tem[i]= int(np.where(tem[i-1]==1, 1, np.random.binomial(1, p = ci_rate[i] / 1000)))

    ci_sim.append(tem)

Is anyone creative enough to solve this more time efficient?

This solution first ignores the persistence rule and enforces it afterwards using maximum.accumulate.

ci_rate = np.random.uniform(0, 0.1, 10)
res = np.maximum.accumulate(np.random.random((20000, ci_rate.size))<ci_rate, axis=1).view(np.int8)
res[:20]
# 
# array([[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, 1],
#        [0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
#        [0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
#        [0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
#        [0, 1, 1, 1, 1, 1, 1, 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]], dtype=int8)

4. NumPy Basics: Arrays and Vectorized Computation, ndarray , a fast and space-efficient multidimensional array providing more domain-specific functionality like time series manipulation, which is not present In addition to np.array , there are a number of other functions for creating new arrays. in data analysis is to produce a new array of values based on another array. I have already made the method for the binomial coefficient but my program have to initialize an array which should display the binomial coefficient but I am only allowed to use the binomial method ({1,1,1,1,2,1}, for example). Here is my code. I really have no idea how to make this work under these conditions.

My attempt would be:

import numpy as np
ci_rate = np.random.normal(size=20)
ci_rate = (ci_rate - min(ci_rate)) /(max(ci_rate) - min(ci_rate)) - 0.7
ci_rate[ci_rate < 0] = 0
r = []
for i in range(100):
    t = np.random.binomial(1, ci_rate)
    r += [t.tolist()]
    ci_rate = [1 if j == 1 else i for i, j in zip(ci_rate, t)]


#output 

[[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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0],

Binomial Random Variables, Let X be a binomial random variable with the number of trials n and in which a biased coin (probability of head = 1/3) is thrown for 10 times. Start learning Data Sructures & Algorithms with the help of the most trusted DSA Based on 1 vote(s) Please use ide.geeksforgeeks.org, generate link and share the link here. Pascal’s triangle is a triangular array of the binomial coefficients. Write a function that takes an integer value n as input and prints first n lines of the Pascal’s triangle. Following are the first 6 rows of Pascal’s Triangle. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

I am suggesting geometric distribution, since it looks like you are trying to see the number of trials for first success.

I am comparing the usefulness of using the geomentric distribution in terms of computation time

EDIT:
%%timeit
ci_rate = np.random.uniform(0, 0.1, nb_years)
successful_trail = np.random.geometric(p=ci_rate)

ci_sim=np.zeros((nb_scenarios,nb_years))
for i in range(nb_years):
    ci_sim[i,successful_trail[i]:]=1

## 10000 loops, best of 3: 41.4 µs per loop

%%timeit
ci_rate = np.random.uniform(0, 0.1, nb_years)
res = np.maximum.accumulate(np.random.random((nb_scenarios, ci_rate.size))<ci_rate, axis=1).view(np.int8)

## 100 loops, best of 3: 2.97 ms per loop

Program to calculate value of nCr, A binomial coefficient C(n, k) can be defined as the coefficient of X^k in the expansion of (1 + X)^n. can be chosen from among n objects; more formally, the number of k-element subsets (or k-combinations) of an n-element set. The idea is simply based on below formula. Space and time efficient Binomial Coefficient A binomial coefficient C(n, k) also gives the number of ways, disregarding order, that k objects can be chosen from among n objects; more formally, the number of k-element subsets (or k-combinations) of an n-element set. The Problem Write a function that takes two parameters n and k and returns the value of Binomial Coefficient C(n, k).

Alias method, In computing, the alias method is a family of efficient algorithms for sampling from a discrete probability distribution, due to A. J. Walker. That is, it returns integer values 1 ≤ i ≤ n according to some arbitrary Based on the probability stored at that index, a biased coin is then flipped, and the outcome of the flip is used to  Most of the discussion will be directed toward binomial and Dolph-Tschebyscheff broadside arrays (also spelled Tchebyscheff or Chebyshev). Of the three distributions (uniform, binomial, and Tschebyscheff), a uniform amplitude array yields the smallest half-power beam width. It is followed, in order, by the Dolph-Tschebyscheff and binomial arrays.

Binomial Distribution – Introductory Statistics, The n trials are independent and are repeated using identical conditions. The mean, μ, and variance, σ2, for the binomial probability distribution are μ = np and σ2 You want to find the probability of rolling a one more than three times. Based on numerical values, would you be surprised if all 22 attended graduation​? Personally, I've been using 2d arrays/matrices, in particular upper-triangular matrices to implement binomial trees. I'm using Python so numpy.ndarray becomes the obvious way to go. I'm not seeing any big problem with this (you are welcome to point out the disadvantages of using ndarray for this job in your opinion).

Arrays, Zero-based indexing. It might seem more natural to you to refer to the first element as a[1], the second When you use new to create an array, Java reserves space in Precomputing values in this way in an example of a space-​time This method is not effective if we need values for huge n, but it is very  Excel VBA Array – The Complete Guide by Paul Kelly · 280 Comments This post provides an in-depth look at the VBA array which is a very important part of the Excel VBA programming language.

Comments
  • based on your else condition, is it should be always 1 after you see first sucess?
  • If you are trying to simulate number of trails to see the first sucess, then use Geometric distribution
  • Very efficient solution. Thank you!
  • is it t = np.random.binomial(1, ci_rate[i]) ?
  • No, binomial will return an array if an array or list is supplied.
  • Nice. Just got to know that.
  • Hi AILearning, your solution is not getting the results that I want. Thanks for your reply.