我需要帮助优化这个嵌套for循环(python)。我正在考虑利用numpy中的冒号表示法,但我所有的尝试都会导致出错。
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
答案 0 :(得分:1)
您可以使用布尔索引:board[board == 0] = ..
编辑:当组合多个布尔条件时,
board[(0 < board) & (board < 1)]
。这是因为按位运算符(&
,|
等)具有比比较更高的优先级。您为布尔掩码组合的数组必须相互之间以及与您要编制索引的数组相互广义。否则,它会出错或出错:
董事会[(董事会== 0)&amp; (np.random.randint(100000)== 1)]
仅从范围[0,100000]中绘制一个随机数。然后,这个单一的绘制将在另一个数组中广播。