2016-10-13 4 views
1

以下の配列を持っています。各行にランダムに1つまたはすべての0を付けたいのですが、現在の1つの値だけを0に変換できます私は行の中に1があるかどうかを確認し、その合計値が0より大きいか= 0であるかどうかを調べるためにチェックを行っています。これを行う簡単な方法があります現在のところ。Numpyのベクトルごとに複数の整数ベクトルの配列を1つの値に変更

m, n = A.shape 
J = np.random.randint(n, size=m) 

あなたは新しい配列を作成するためにこれらを使用することができます:

I = np.arange(m) 
B = np.zeros_like(A) 
B[I,J] = A[I,J] 

か、変更したい場合にあなたがランダムに行毎に残したい列を選択することができます

A = np.array([ 
     [ 0 , 1 , 1 , 0 , 1 ] , 
     [ 1 , 0 , 0 , 1 , 1 ] , 
     [ 0 , 0 , 1 , 0 , 0 ] , 
     [ 0 , 1 , 0 , 0 , 1 ] , 
     [ 1 , 0 , 0 , 0 , 0 ] , 
     [ 0 , 0 , 1 , 1 , 0 ] , 
     [ 0 , 0 , 0 , 0 , 0 ] , 
     [ 1 , 0 , 1 , 0 , 0 ] , 
     [ 1 , 0 , 1 , 1 , 1 ] , 
     [ 0 , 0 , 1 , 1 , 0 ] , 
     [ 0 , 1 , 0 , 1 , 0 ] , 
     [ 0 , 1 , 0 , 0 , 1 ] , 
     [ 0 , 0 , 1 , 1 , 0 ] , 
     [ 0 , 1 , 1 , 0 , 1 ] , 
     [ 0 , 0 , 1 , 0 , 0 ] ]) 

if np.any(A[0] == 1)==True and np.sum(A[0])>=0: 
    change row to all 0's randomly or keep one of the existing 1 values randomly. Ideally, if it could do it to the whole array, it would be very useful, but row by row is fine. 

答えて

0

A、例えばビットシフトを使用してください:

I = np.arange(m) 
A[I,J] <<= 1 
A >>= 1 
+0

私はこれを明示的に十分に明確にしたかどうかわかりません。各行では、現在の1がある場所にランダムにすべてを0に設定するか、1つだけを設定します。これらは本質的に人の利用可能性のシフトであるため、人は第1行で3シフトのために利用可能であるが、これら3シットの作業1に限定される。私は、このスケジュール嗜好の限界に基づいて遺伝子アルゴリズムのための個体を生成しようとしています。 – UpliftedApe

関連する問題