Programação  
 
Rede de conhecimento computador >> Programação >> Programação Python >> Content
Qual é o processo para gerar um produto cartesiano Numpy em Python?
Numpy não possui uma função interna para calcular diretamente o produto cartesiano. A função `itetools.product` da biblioteca padrão do Python é geralmente a maneira mais eficiente de conseguir isso, especialmente para matrizes maiores. No entanto, você pode converter o resultado em uma matriz Numpy, se necessário.

Veja como você pode fazer isso, juntamente com explicações e comparações com outros métodos menos eficientes:

Método 1:Usando `` itetools.product` (recomendado)

Esta é a abordagem mais eficiente e pitônica:

`` `Python
importar numpy como np
do produto de importação de itertools

def Cartesian_product_iterTools (matrizes):
"" "" Gera o produto cartesiano de várias matrizes usando o itertools.product.

Args:
Matrizes:uma lista de matrizes numpy.

Retornos:
Uma matriz Numpy representando o produto cartesiano. Retorna nenhum se a entrada for inválida.
"" "
se não é o ISInstance (matrizes, list):
retornar nenhum
se não todos (isinstance (arr, np.ndarray) para arr em matrizes):
retornar nenhum

Retorne np.array (list (produto (*matrizes))))

Exemplo de uso:


Array1 =np.array ([1, 2])
Array2 =np.array ([3, 4])
Array3 =np.array ([5, 6])

resultado =cartesian_product_itertools ([Array1, Array2, Array3])
Imprimir (resultado)

Saída:[[1 3 5]


[1 3 6]


[1 4 5]


[1 4 6]


[2 3 5]


[2 3 6]


[2 4 5]


[2 4 6]]


`` `

Método 2:Usando loops aninhados (menos eficiente, evite matrizes grandes)

Este método é conceitualmente mais simples, mas significativamente mais lento para matrizes de entrada maiores:

`` `Python
importar numpy como np

Def Cartesian_product_nested_loops (matrizes):
"" "" Gera o produto cartesiano usando loops aninhados (menos eficientes). "" "
se não todos (isinstance (arr, np.ndarray) para arr em matrizes):
retornar nenhum

num_arrays =len (matrizes)
Shapes =[arr.Shape for ARR em matrizes]
resultado_shape =(np.prod ([forma [0] para a forma em formas]), num_arrays)
resultado =np.zeros (resultado_shape, dtype =np.int32)

para i, arr em enumerado (matrizes):
indexer =[slice (nenhum)] * num_arrays
indexador [i] =slice (nenhum)

# Usando indexação avançada para gerar produto cartesiano
arr_Repeated =np.Tile (arr, (np.prod ([sh [0] para sh em formas [:i] + formas [i + 1:]]), 1)))
Resultado [:, i] =arr_repeated.rehape (resultado_shape [0])

resultado de retorno

resultado =cartesian_product_nested_loops ([Array1, Array2, Array3])
Imprimir (resultado)
`` `

Por que `itetools.product` é preferido:

* Eficiência: `itetools.product` é altamente otimizado para gerar produtos cartesianos. Evita a criação de grandes matrizes intermediárias, tornando-o muito mais eficiente em termos de memória, especialmente ao lidar com muitas ou grandes matrizes de entrada.
* Legabilidade: O código usando `itetools.product` é mais limpo e mais fácil de entender.


A abordagem de loop aninhada, enquanto ilustra o conceito subjacente, torna-se drasticamente mais lento e menos eficiente em termos de memória à medida que o número de matrizes de entrada ou seus tamanhos aumentam. Portanto, sempre use `` itetools.product` para gerar produtos cartesianos em python, especialmente dentro de um contexto Numpy. Somente recorra a loops aninhados para fins educacionais ou exemplos simples e muito pequenos. Lembre-se de lidar com possíveis erros, como fornecer uma entrada não-lista ou matrizes não numidas, como mostrado no exemplo com a verificação de erros.

Anterior :

Próximo :
  Os artigos relacionados
·Como chamar o método Python De Java 
·Como descobrir o que versão do Python que você tem 
·Como classificar um dicionário Python por chaves ou va…
·Fazendo histogramas em Python 
·Como adicionar duas cordas para Python 
·Como substituir Python Direito 
·Erros de Unicode em Python 
·Como calcular a média dos montantes em Python 
·Existe outro programa como Fruity Loops? 
·Como instalar Pygame Com Python 2.7 em um Mac 
  Artigos em destaque
·Qual foi a linguagem construída no ENIAC? 
·O melhor livro para aprender PHP 
·Como criar uma senha usando VB6 
·Como funciona o MySQL? 
·Como proteger um painel de administração em PHP Sem S…
·Como ler uma assinatura digital em C # 
·Como editar e Ordenar Embalado Decimal em Mainframe 
·Como usar o PHP para Celular Websites 
·As desvantagens do uso de Widgets no projeto de computa…
·Como encontrar ausente registros usando SQL 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados