DGMS89 - 1 month ago 15

Python Question

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)`

Answer Source

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
```