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

Другие вопросы по тегам