2016-04-30 7 views
0

このネストされたforループ(Python)を最適化するための助けが必要です。私はnumpyでコロンの表記法を利用することを考えていましたが、すべての試みが間違っていました。numpyコロン記法によるPythonコードの最適化

import numpy as np 

board = np.random.rand(300, 300) 
for i in range(300): 
     for j in range(300): 
      if (board[i,j] == 0): 
       if (np.random.randint(1000) == 1) : board[i,j] = 1 

答えて

1

あなたはboolean型のインデックスを使用することができますboard[board == 0] = ..

EDIT: board[(0 < board) & (board < 1)]:あなたには、いくつかのブラケットを必要とする、

  • を複数のブール条件を組み合わせます。これは、ビット単位の演算子(&,|など)が比較よりも優先順位が高いためです。
  • ブーリアンマスク用に結合する配列は、お互いに、またインデックスを作成する配列に対してブロードキャスト可能である必要があります。それ以外の場合は、いずれかのエラーアウトまたは悪化:

    ボード[(ボード== 0)&(np.random.randint(100000)== 1)]

のみ描く単一ランダム[0、100000]の範囲の数値です。この単一の描画は、他のアレイを横断してブロードキャストされます。

+0

こんにちは、私はこれを試しました: 'ボード[ボード== 0&np.random.randint(100000)== 1] = 1'しかし、それは動作しません。 – user3408085

+0

2つのバグ:1つの構文、1つの厄介な - 編集を参照してください。 –

+0

すべての反復の乱数については、 'np.random.randint(0,1000、board.shape)== 1'が必要だと思います。 – Divakar