Funções universais com NumPy
As funções universais trabalham com objetos ndarray. E são utilizadas para a vetorização no numpy, por ser mais rápidas que a iteração dos objetos. As funções universais podem receber argumentos adicionais, como where, dtype e out. O argumento where indica onde a operação deve ocorrer. O dtype define o tipo de retorno. E out define a matriz de saída onde o retorno da função deve ser copiado.
Vetorização
Imagine que você tem duas listas, [1, 2, 3] e [4, 5, 6], e quer somar o primeiro elemento da primeira lista com o primeiro elemento da segunda lista (1 + 4). E fazer isso até o final das duas listas. Um jeito de fazer isso é iterar sobre as duas listas e somar os seus valores. A função interna do python, zip, itera sobre as duas listas e retorna uma tupla com os elementos correspondentes de cada lista: o primeiro elemento da primeira lista com o primeiro elemento da segunda lista. A função faz isso até alcançar o final das duas listas.Com essa tupla, com os números lado a lado, só precisamos somar.
Exemplo
Utilizando a função zip o resultado seria cinco, sete e nove. Podemos obter o mesmo resultado usando a função add. Mais por que utilizar a função add? Por que a função add fornece o mesmo resultado de modo mais rápido. Isso porque a função add utiliza a vetorização ao contrario da zip que itera sobre os elementos das duas listas. A função add soma o terceiro elemento da primeira matriz com o terceiro elemento da segunda matriz, sem olhar para as outras.
a = [1, 2, 3]
b = [4, 5, 6]
c = []
for i, j in zip(a, b):
c.append(i + j)
print(c)
b = [4, 5, 6]
c = []
for i, j in zip(a, b):
c.append(i + j)
print(c)
Exemplo
import numpy as np
a = [1, 2, 3]
b = [4, 5, 6]
c = np.add(a, b)
print(c)
a = [1, 2, 3]
b = [4, 5, 6]
c = np.add(a, b)
print(c)
Criando sua própria função universal
Com o método frompyfunc é possível criar uma função universal. Você só precisa criar uma função normalmente e passar essa função para o método frompyfunc. O método frompyfunc recebe como parâmetros o nome da função que você acabou de criar, o numero de argumentos que essa função vai receber e o numero de objetos que essa função vai retornar. Depois disso é só atribuir o resultado do método frompyfunc a um objeto.
Exemplo
import numpy as np
def myadd(a, b):
return a + b
myadd = np.frompyfunc(myadd, 2, 1)
print(myadd([1, 2, 3], [4, 5, 6]))
def myadd(a, b):
return a + b
myadd = np.frompyfunc(myadd, 2, 1)
print(myadd([1, 2, 3], [4, 5, 6]))
0 comentários:
Postar um comentário