Оптимизация кода Python с помощью нотации двоеточия
Мне нужна помощь в оптимизации этого вложенного цикла (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). Этот единственный розыгрыш затем транслируется через другой массив.