HOWTO · NumPy
Converter Matriz NumPy em Tupla
Existem dois métodos principais que podem ser usados para converter um array NumPy em tuplas em Python, a função tuple() e a função map().
Nesta página
Converta um array NumPy com a função integrada tuple() do Python. Para um array unidimensional, tuple(array) cria uma tupla com seus elementos. Para um array bidimensional, converta também cada linha quando precisar de tuplas aninhadas. Os exemplos abaixo mostram os dois formatos e uma alternativa com map().
Converter um array NumPy unidimensional em uma tupla
tuple() recebe um iterável e reúne em uma tupla os itens que ele fornece. Um array NumPy unidimensional fornece seus valores durante a iteração; por isso, passá-lo diretamente para tuple() resulta em uma tupla simples. O exemplo a seguir usa números inteiros NumPy; a representação exibida pode variar conforme a versão do NumPy.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import numpy as np
array = np.array([10, 20, 30])
result = tuple(array)
print(result)
(np.int64(10), np.int64(20), np.int64(30))
Converter um array NumPy bidimensional em tuplas aninhadas
A iteração sobre um array bidimensional fornece suas linhas. Portanto, tuple(matrix) cria uma tupla externa cujos itens ainda são arrays de linhas NumPy. Para converter também as linhas, passe cada uma para tuple(). Assim, o agrupamento original de linhas e colunas é mantido no resultado.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import numpy as np
matrix = np.array([[1, 2], [3, 4]])
result = tuple(tuple(row) for row in matrix)
print(result)
((np.int64(1), np.int64(2)), (np.int64(3), np.int64(4)))
A compreensão realiza a conversão interna uma vez para cada linha; em seguida, a tuple() externa reúne essas tuplas. A representação dos escalares NumPy pode variar conforme a versão.
Usar map() para converter cada linha
Você pode expressar a mesma operação linha a linha com map(tuple, matrix). Em Python, map() retorna um iterador; portanto, envolva-o em tuple() para materializar todas as linhas convertidas. Essa é uma alternativa concisa quando a operação consiste simplesmente em aplicar tuple() a cada linha.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import numpy as np
matrix = np.array([[1, 2], [3, 4]])
result = tuple(map(tuple, matrix))
print(result)
((np.int64(1), np.int64(2)), (np.int64(3), np.int64(4)))
Aqui, map() converte linhas, e não cada valor escalar. Para converter os valores individualmente, use outra expressão, como tuple(int(value) for value in array), ao transformar os valores de um array unidimensional em números inteiros do Python. A conversão adequada depende de você querer transformar linhas ou valores.
Escolher a conversão adequada ao resultado desejado
Use tuple(array) para obter uma sequência unidimensional simples. Para um array bidimensional, use uma conversão aninhada, como tuple(tuple(row) for row in matrix), ou a alternativa com map() quando quiser manter cada linha como uma tupla separada. Essas formas preservam o agrupamento dos valores por linha.
As tuplas não mantêm propriedades dos arrays NumPy, como o atributo shape ou as operações de array. O aninhamento reflete as linhas convertidas, mas não corresponde aos metadados de formato do NumPy. Achatar o array com um método é uma opção quando a tarefa exige uma única sequência com todos os valores; isso altera a estrutura e elimina o agrupamento por linha. Não é necessário achatar o array para criar tuplas aninhadas.
Além disso, converter um array em tupla não garante que todos os itens se tornem escalares nativos do Python. Os valores NumPy podem continuar sendo objetos escalares NumPy. Use uma conversão explícita, como int(), somente se o código que receberá o resultado exigir esse tipo, e escolha uma conversão apropriada para os valores em questão. A representação exibida dos escalares NumPy pode variar conforme a versão.