<jupyter_start><jupyter_text>Universal Functions Universal functions (unfuncs), são funções built-in do numpy que nos fornecem uma interface fácil e flexível para computação otimizada com matrizes de dados. Essa otimização é feita através das chamadas operações vetorizadas, cujo principal objetivo é executar rapidamente operações repetidas em valores em matrizes NumPy.Computações que usam a vetorização por ufuncs são quase sempre mais eficientes do que suas contrapartes implementadas por loops do Python, especialmente à medida que os arrays aumentam de tamanho. Sempre que vir esse loop em um script Python, você deve considerar se ele pode ser substituído por uma expressão vetorizada.<jupyter_code>#Importando o módulo
import numpy as np<jupyter_output><empty_output><jupyter_text>As unfuncs possuem calculos para algebra, trigonometria, exponenciais e logarítimos, etc. Vamos, a seguir, mostrar algumas dessas funções, porém vale e pena explorar a documentação para obter mais informações. **Raíz quadrada**<jupyter_code>x = np.array([9, 16, 25])

np.sqrt(x)<jupyter_output><empty_output><jupyter_text>**Exponencial**<jupyter_code>x = [1, 2, 3]

print("x =", x)
print("e^x =", np.exp(x))
print("2^x =", np.exp2(x))
print("3^x =", np.power(3, x))<jupyter_output>x = [1, 2, 3]
e^x = [ 2.71828183  7.3890561  20.08553692]
2^x = [2. 4. 8.]
3^x = [ 3  9 27]<jupyter_text>**Logaritmos base n**<jupyter_code>x = [1, 2, 4, 10]

print("x =", x)
print("ln(x) =", np.log(x))
print("log2(x) =", np.log2(x))
print("log10(x) =", np.log10(x))<jupyter_output>x = [1, 2, 4, 10]
ln(x) = [0.         0.69314718 1.38629436 2.30258509]
log2(x) = [0.         1.         2.         3.32192809]
log10(x) = [0.         0.30103    0.60205999 1.        ]<jupyter_text>**Funções trigonométricas**<jupyter_code>theta = np.linspace(0, np.pi, 3)

print("theta = ", theta)
print("sin(theta) = ", np.sin(theta))
print("cos(theta) = ", np.cos(theta))
print("tan(theta) = ", np.tan(theta))<jupyter_output>theta =  [0.         1.57079633 3.14159265]
sin(theta) =  [0.0000000e+00 1.0000000e+00 1.2246468e-16]
cos(theta) =  [ 1.000000e+00  6.123234e-17 -1.000000e+00]
tan(theta) =  [ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]<jupyter_text>Os exemplos acima se tratam da unfuc unárias, que interagem com uma array. Há também as unfucs binárias que intergaem com duas arrays. **Soma**<jupyter_code>x = np.array([9, 2, 5])
y = np.array([4, 3, 6])

np.sum([x, y])<jupyter_output><empty_output><jupyter_text>**Máximo**<jupyter_code>np.max([x, y])
np.multiply.outer(x, y)<jupyter_output><empty_output><jupyter_text>**Funções booleanas**<jupyter_code># Podemos usar funções booleanas combinadas para filtrar um lista de dados
# No exemplo abaixo, filtramos as notas >=5 e < 9.
notas = np.array([4, 6, 7, 6, 7, 9, 10, 2, 6, 7, 9, 6, 6, 4])

np.sum((notas >= 5) & (notas < 9))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14683368128044538, 'fraction_numerical': 0.09151009046624912, 'mean_word_length': 4.9523809523809526, 'pattern_counts': {'":': 0, '<': 32, '<?xml version=': 0, '>': 32, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 3, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '482576', 'license': 'MIT', 'n_tokens_mistral': 1352, 'n_tokens_neox': 1174, 'n_words': 300, 'path': 'Python/02 Numpy/02.05 Universal Funcions (ufuncs).ipynb', 'repo_name': 'rdemarqui/Data-Science-B-sico', 'size': '2874'}