2016-06-16 12 views
0

私は0-1の範囲の疎な3次元ノンパラメトリックデータセットを生成しようとしています。データセットにはゼロも含める必要があります。私が使用して、これを生成しようとしました:0-1の範囲内のランダムな疎データの生成

training_matrix = numpy.random.rand(3000, 3) 

が、それは、行のいずれかで0.00000としてデータを印刷していません。

+0

あなたの配列はどのような形状にする必要がありますか? – Tonechas

+0

配列は3000行であり、3列の場合はいくつかの行が同じである必要があります。0.00000 0.00000 0.00000 0 – Angela

+0

3000行3列は3D配列ではなく2D配列に対応します – Tonechas

答えて

2

我々は3列によってnrows行のゼロの配列を作成することから始め:

import numpy as np 
nrows = 3000 # total number of rows 
training_matrix = np.zeros((nrows, 3)) 

その後、我々はランダムにrange(nrows)から(交換なし)nz整数を描きます。これらの数値は、ゼロ以外のデータを持つ行のインデックスです。 training_matrixのスパース性は、nzによって決定されます。

nz = 1500 # number of rows with nonzero data 
indices = np.random.choice(nrows, nz, replace=False) 

そして最後に、我々は advanced indexingを通じて乱数で選択された行を移入:あなたは(この例ではスパース性を50%に設定されている中で)あなたのニーズに合わせて、その値を調整することができます

training_matrix[indices, :] = np.random.rand(nz, 3) 

この上記のコードを実行することによって得られるものです:

>>> print(training_matrix) 
[[ 0.96088615 0.81550102 0.21647398] 
[ 0.   0.   0.  ] 
[ 0.55381338 0.66734065 0.66437689] 
..., 
[ 0.   0.   0.  ] 
[ 0.03182902 0.85349965 0.54315029] 
[ 0.71628805 0.2242126 0.02481218]] 
+0

ありがとうございました。 – Angela

2

5つの数字をすべて0にしたいので、それが起こる確率は1/10^5 = 0.00001で置き換えられます。あなたが3000 * 3 = 9000の値を持っていても、それを得る確率はまだごくわずかです。あなたの心の平和のためにやってみることができる他の何かがランダムな数字を生成し、特定のポイント、つまり小数点以下5桁で切り捨てることです。

関連する問題