Numpyで、要素数の総和がNとなる制約の下、n次元のランダムベクトルを生成したい。


Numpyで、n次元のランダムベクトルvを作りたいのですが、  
ベクトルの要素の総和がNになるようにしたいです。

例えば、  
n=4で、N=1ならば、`v = np.array([0.1, 0.3, 0.2, 0.4])`  
あるいは、  
n=6で、N=3ならば、`v = np.array([0.3, 0.1, 1.2, 0.6, 0.5, 0.3])`  
というような感じです。

このようなことをNumpyで実現するにはどうすれば良いでしょうか？




多少の誤差を気にしないのであれば、ひとまず `n` 個のランダムな数を生成した後、正規化すれば良いです。

[code]

    >>> import numpy as np
    >>> n = 7
    >>> N = 3
    >>> random_numbers = np.random.rand(n)
    >>> print(random_numbers)
    [ 0.61444461  0.44538832  0.80188737  0.57265561  0.05225624  0.07613083
      0.55669533]
    >>> print(np.sum(random_numbers))
    3.11945832298
    >>> answer = N * random_numbers / np.sum(random_numbers)
    >>> print(answer)
    [ 0.59091472  0.42833237  0.77117943  0.55072601  0.05025511  0.07321543
      0.53537692]
    >>> print(np.sum(answer))
    3.0
    
[/code]

