2016-04-30 14 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

您可以使用布爾索引:board[board == 0] = ..

編輯:當組合多個布爾條件,

  • 你需要一些括號: board[(0 < board) & (board < 1)]。這是因爲按位運算符(&,|等)具有比比較更高的優先級。
  • 您爲布爾值掩碼組合的數組必須相互廣泛,並且與您索引的數組可擴展。否則,它要麼錯誤出或更糟:

    板[(板== 0)&(np.random.randint(100000)== 1)]

僅汲取一個單一隨機數字範圍[0,100000)。然後這個單一的繪製被廣播到另一個陣列。

+0

嗨,我試過這個:board [board == 0&np.random.randint(100000)== 1] = 1',但它不會工作。 – user3408085

+0

兩個錯誤:一個語法,一個令人討厭 - 請參閱編輯。 –

+0

對於所有迭代中的隨機數,我認爲你需要:'np.random.randint(0,1000,board.shape)== 1'。 – Divakar