Reputation: 131
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
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
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