leonardik
leonardik

Reputation: 131

Python - random adding or subtraction

I need a code which randomly adds or subtracts "value" to "a". What should be changed?

a=[500]

    for b in range(10):
        value = np.random.normal(30,45)
        b=a[-1]+value
        a.append(b)
   print(a)

Upvotes: 1

Views: 662

Answers (2)

Don CorliJoni
Don CorliJoni

Reputation: 248

You can define lambda methods, which are adding or subtracting two values. random.choice(operators) will give you either the add or sub method

import random    
a=[500]
operators = [lambda v1, v2: v1 + v2, lambda v1, v2: v1 - v2]

for b in range(10):
    value = np.random.normal(30,45)
    b=random.choice(operators)(a[-1], value)
    a.append(b)
print(a)

Upvotes: 1

mozway
mozway

Reputation: 261830

You can use random.choice (or here numpy.random.choice) to select a random 1/-1 multiplier for your value:

a=[500]

for b in range(10):
    value = np.random.normal(30,45)
    b=a[-1]+np.random.choice([1,-1])*value
    a.append(b)
print(a)

example output:

[500, 513.2237141988519, 588.9843508427733, 624.9574513596328, 584.5768718451194, 661.7449702821177, 669.7390327167406, 674.3535080356667, 683.0279324368053, 778.2462016083371, 811.8400014298703]

As you use numpy, a vectorial version of your code could be:

a = [500]
b = np.random.normal(30, 50 , size=10)
c = np.random.choice([1,-1], size=10)

out = a+(a[0]+(b*c).cumsum()).tolist()

output:

[500, 508.3624740313066, 557.7240157381159, 601.5306261665148, 614.1462988784867, 725.6862623619575, 766.1316022396272, 806.781918017178, 765.5196094616228, 815.2372699903966, 929.5709214662356]

Upvotes: 2

Related Questions