Как использовать np.where, чтобы вернуть список кортежей со всеми позициями в двумерном массиве numpy, равном нулю? - PullRequest
0 голосов
/ 14 января 2019

Я узнаю о numpy, и в качестве упражнения я должен создать возможности функций, которые имеют в качестве входных данных массив numpy 2D с целыми числами и должны возвращать список кортежей, значения которых являются нулями. Мне сказали, что у numpy есть функция, которая может помочь. Я прочитал документы, но не смог понять это, по крайней мере, не для этой задачи, поэтому мне пришлось делать это с такими циклами:

def possibilities(board):
    not_occupied = []
    for i in range(len(board)):
        for j in range(len(board[0])):
            if board[i][j] == 0:
                not_occupied.append((i,j))
    return not_occupied

Доска выглядит примерно так:

board = [[1,2,0],[0,0,1],[2,0,1]]

Как я мог бы использовать numpy, где вместо этого сделать?

1 Ответ

0 голосов
/ 14 января 2019

Вы можете использовать argwhere :

import numpy as np

board = [[1, 2, 0],
         [0, 0, 1],
         [2, 0, 1]]

result = np.argwhere(np.array(board) == 0).tolist()

выход

[[0, 2], [1, 0], [1, 1], [2, 1]]

Если координаты должны быть кортежами, вы можете сделать:

result = [tuple(coord) for coord in np.argwhere(np.array(board) == 0).tolist()]

выход

[(0, 2), (1, 0), (1, 1), (2, 1)]
...