2016-08-08 11 views
2

私は、各行で同じ割合で0に減衰する一様分布の行列を構築しようとしています。崩壊を伴うナンキーな均一分布

w = np.array([np.random.uniform(-1, 1, 10) for i in range(10)]) 

をして達成することができます:

[[0.454/exp(0) -0.032/exp(1) 0.641/exp(2)...] 
[-0.234/exp(0) 0.921/exp(1) 0.049/exp(2)...] 
... 
[0.910/exp(0) 0.003/exp(1) -0.908/exp(2)...]] 

私が使用して均一な分布の行列を構築することができます:私は何を見ていますが似ている何かを構築することである間-1と1の分布はべきです

for k in range(len(w)): 
    for l in range(len(w[0])): 
     w[k][l] = w[k][l]/np.exp(l) 

が、これを達成するためのより良い方法があったかどうかを知りたいと思った:とforループを使用して目的の結果。

答えて

6

:代わりに `.reshape(10、10)`呼び出すので

w = np.random.uniform(-1, 1, size=(10, 10)) 
weights = np.exp(np.arange(10)) 
w /= weights 
+2

を、あなたは 'size'として'タプル '(10、10)を渡すことができます'uniform'の議論です。 –

+0

ありがとうございます。私はシグネチャだけでなく、 'size'パラメータがスカラであると仮定していたはずです。 –

1

Alok Singhalの回答は最高ですが、別の方法(これはおそらくより明示的です) ベクトル[exp(0), ...,exp(9)]を複製して、それらのすべてをベクトルの外積を使って行列に積み重ねることができます。その後、 'w'行列を新しい 'decay'行列で除算します。

n=10 
w = np.array([np.random.uniform(-1, 1, n) for i in range(n)]) 
decay = np.outer(np.ones((n,1)), np.exp(np.arange(10))) 
result = w/decay 

np.tileを使用して、ベクターの複数のコピーから行列を作成することもできます。それは外側の製品のトリックと同じことを成し遂げます。あなたがこれを行うにnumpyのの放送機能を使用することができます