2017-07-21 8 views
1

私はfollを持っています。 2D numpyの配列:以下の固有の値を持つnumpy 2D配列からランダムに細胞の特定の割合を選択してください

array([[[-32768, -32768, -32768, ..., -32768, -32768, -32768], 
     [-32768, -32768, -32768, ..., -32768, -32768, -32768], 
     [-32768, -32768, -32768, ..., -32768, -32768, -32768], 
     ..., 
     [-32768, -32768, -32768, ..., -32768, -32768, -32768], 
     [-32768, -32768, -32768, ..., -32768, -32768, -32768], 
     [-32768, -32768, -32768, ..., -32768, -32768, -32768]]], dtype=int16) 

array([-32768, 401, 402, 403, 404], dtype=int16) 

は、私は401を用いた細胞の10%が500に変更され、新しい配列を作成することができます方法はありますか? np.random.random_sample()を使用して、指定されたパーセンテージのセル(たとえば、このnumpy 2D配列から10%)を選択する方法はできません。

答えて

2

配列をaで示します。そして、これは仕事を行います。ここでは

locs=np.vstack(np.where(a==401)).T 
n=len(locs) 
changes_loc=np.random.permutation(locs)[:n//10] 
a[changes_loc[:,0],changes_loc[:,1]]=500 

は(単に行動を描写するために、異なる番号の代わりに、10%の25%)の小さな例です。

a=np.array([[1,2,3],[4,1,5],[1,1,7]]) 
locs=np.vstack(np.where(a==1)).T 
n=len(locs) 
changes_loc=np.random.permutation(locs)[:n//4] 
a[changes_loc[:,0],changes_loc[:,1]]=70 

結果は

です
array([[70, 2, 3], 
     [ 4, 1, 5], 
     [ 1, 1, 7]]) 
+0

ありがとうございます! 'n // 4'は何をするのですか? – user308827

+1

これはちょっとした例だったので、どのように動作するか見ることができます。あなたのコードでは、あなたが10%を望むので、// 10を(私の答えの最初の部分に書いたように)行うべきです。 –

+0

ありがとう! '[changes_loc [:、0]、changes_loc [:、1]]'は何をするのですか? – user308827

関連する問題