2017-05-25 7 views
1

私が最初にこの条件を満たしているマトリックス、作成したい:例えば値がいくつかの条件を満たすnumpy行列を作成するにはどうすればよいですか?

  1. m = np.ones((6, 6), int) 
    m = np.triu(m, 1) 
    

    および特定のパーセンテージが達成されるまで、私は、ゼロに残りのいくつかのランダムな値を変更: - 値場合m[2][1] == 0 < Iのような上三角行列を使用しこれについて>m[1][2] in {0,1}

MaxPer = 0.75 
i, e = np.count_nonzero(m), np.count_nonzero(m) 
MAX = np.round(MaxPre*e) 
while i > MAX: 
    m[np.random.randint(len(m[0][:]))][np.random.randint(len(m[0][:]))] = 0 
    i = np.count_nonzero(m) 

今、第二の基準は、私が苦労していますいずれかになります。

  • m[1][2] == 1 & m[1][3] == 0場合< - >m[2][3] == 0 Iはmのすべての値がこの条件を満たしている場合、チェックしたい
  • (インデックス1,2,3例です)。そうでなければ、m[2][3]の値をゼロに変更したいと思います。私はfor-loopsで次のコードを試しましたが、すべての値をゼロに上書きします。

    for k in range(len(m[0][:])): 
          for l in range(k, len(m[0][:])): 
           for j in range(l,len(m[0][:])): 
            if matrix[k][l] == 1 & matrix[k][j] == 0: 
             matrix[l][j] = 0 
    

    ループなしでこれに簡単な方法はありますか?

    +0

    こんにちはベネディクト、このサイトにようこそ。私たちはここに質問を残すのが好きなので、私は先に進み、あなたのことを切り捨てました。変更に満足できない場合は、もう一度編集してください。 – MackM

    +0

    Mack;を編集していただきありがとうございます) –

    答えて

    0

    実際には、2番目の条件を課すと、行列がゼロになると思います。 は、あなたはi、jおよびk間の依存関係のない

    ​​

    をよろしいですか?

    多分このようなものが必要なのでしょうか(それはforsにいくつかの変更が必要でしょう)?

    m[i][i+1] == 1 & m[i][i+2] == 0 <-> m[i+1][i+2] == 0 
    
    関連する問題