DGMS89 - 1 month ago 15
Python Question

# Generating an array of random variables (positive and negative) that sum up to 1

I am trying to create a numpy array with random variables that sum up to 1, but I also want to include negative values.

I am trying:

``````size =(50,1)
w = np.array(np.random.random(size))
``````

to create the array and populate with numbers (negative and positive), and this works fine.

Now I am trying to make them sum up to 1 with:

``````w /= np.sum(w)
``````

But this changes my values to be all positive (eliminating the negative values).

What is the proper way to do an array like this?

Edit: I already tried random.int and random.uniform, but the problem is that those don't sum up to 1. and if I use
`w /= np.sum(w)`
to make sure they sum up to one, it just returns positive values.

Your problem isn't your normalization, it's your random generator. `np.random.random` always generates positive floats from `(0,1)`. If you want negative numbers, you'll have to change that.

``````w = np.random.random(size)*2-1
w /= w.sum()

w

array([[ 0.05377353],
[ 0.11272973],
[ 0.00789277],
...,
[ 0.06874176],
[-0.12505825],
[-0.15924267]])

w.sum()
1.0
``````