2017-10-09 7 views
0

私は、1と-1の形状(1000、)のシーケンスを含む配列があります。このサンプルの10%にランダムノイズを追加する必要があります。ノイズは、与えられた値の符号の簡単な切り替え(例えば、もともと1の場合は-1)になります。私の現在の解決策は以下の通りです:ランダムに選択された配列のサブセットの値を変更するにはどうすればよいですか?

# create an array of the indices of the values we are going to change 
noisy_index = np.random.choice(1000, size=100, replace=False) 

# multiply by -1 to change sign of these randomly selected values 
mult = np.multiply(correct_labels[noisy_index], -1) 

# delete these values from the original dataset 
labels_subset = np.delete(correct_labels, noisy_index) 

# concatenate the modified values to get back complete (and now noisy) dataset 
correct_labels_noisy = np.concatenate((labels_subset, mult), axis=0) 

2つの質問:1)これは私がそれをしなければならないと述べたことですか? 2)より簡単で控えめなアプローチがありますか?

答えて

2

最も簡単により選択された値を乗算-1とを有する対応するインデックスに戻って割り当てることになる。

correct_labels[noisy_index] *= -1 

correct_labels = np.random.choice([1,-1], size=10) 
print('original labels: ', correct_labels) 
​ 
noisy_index = np.random.choice(10, size=3, replace=False) 
correct_labels[noisy_index] *= -1 
print('modified labels: ', correct_labels) 

#original labels: [ 1 -1 -1 1 -1 -1 -1 -1 -1 1] 
#modified labels: [ 1 -1 -1 1 1 -1 1 -1 -1 -1] 
#        ^ ^ ^

print('noisy index: ', noisy_index) 
# noisy index: [6 4 9] 
関連する問題