O NumPy é um pacote para computação científica e algebra linear para Python.
No Python, todos os pacotes externos, assim como no R precisam ser importados. Executando o comando abaixo importamos essa biblioteca.
import numpy as np
Observe que ‘np’ é usado para simplificar e evitar a repetição de ‘numpy’ o tempo todo. Você poderia escolher qualquer outro nome. Numpy tem muitas funções e capacidades integradas. Nós não vamos cobrir todos aqui, mas vamos nos concentrar nas listas e também ver um pouco de geração de números.
A partir de agora irei chamar Numpy Array sempre que me referir a listas Numpy. Os NumPy Array são a principal maneira de usar o Numpy. Numpy Array essencialmente vêm em dois formatos: vetores e matrizes. Vetores são essencialmente de 1-dimensão e matrizes são 2-dimensões (mas você deve notar que um vetor ainda pode ter apenas uma linha ou uma coluna).
Criaremos um NumPy array diretamente de uma lista
my_list = [10,20,30] ##lista padrão do python
my_list
[10, 20, 30]
np_list =np.array(my_list) # Um NumPy Array simples pode ser definida fornecendo uma única lista de números como um argumento.
print( np_list)
[10 20 30]
type(np_list) ##classe de Numpy Array é numpy.ndarray
numpy.ndarray
matrix_2d = [[1,2,3],[4,5,6]]
matrix_2d
[[1, 2, 3], [4, 5, 6]]
np_matrix_2d = np.array(matrix_2d)
print( np_matrix_2d)
[[1 2 3]
[4 5 6]]
Existem muitas formas incorporadas de gerar NumPy Array
Retorna valores uniformemente espaçados dentro de um determinado intervalo.
np.arange(0,15) ##gera um NumPy array de 15 elelmentos de 0 a 14
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
np_arange=np.arange(0,15) ##armazenar oa lsiat criada
type(np_arange) ##observe que ele é um NumPy arraY
numpy.ndarray
print(np_arange)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
np.arange(0, 11, 2) #Range 0 a 10 com step 2
array([ 0, 2, 4, 6, 8, 10])
O linspace é semelhante ao arange, mas usa um número de amostras em vez do tamanho do passo.
np.linspace(0, 10, 50) # aqui foi gerado 50 valores entre 0 e 10
array([ 0. , 0.20408163, 0.40816327, 0.6122449 ,
0.81632653, 1.02040816, 1.2244898 , 1.42857143,
1.63265306, 1.83673469, 2.04081633, 2.24489796,
2.44897959, 2.65306122, 2.85714286, 3.06122449,
3.26530612, 3.46938776, 3.67346939, 3.87755102,
4.08163265, 4.28571429, 4.48979592, 4.69387755,
4.89795918, 5.10204082, 5.30612245, 5.51020408,
5.71428571, 5.91836735, 6.12244898, 6.32653061,
6.53061224, 6.73469388, 6.93877551, 7.14285714,
7.34693878, 7.55102041, 7.75510204, 7.95918367,
8.16326531, 8.36734694, 8.57142857, 8.7755102 ,
8.97959184, 9.18367347, 9.3877551 , 9.59183673,
9.79591837, 10. ])
Função para gerar zeros: np.zeros
np.zeros(3) # vetor
array([ 0., 0., 0.])
np.zeros((5,5)) #matriz 5x5
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
Função para gerar 1’s:np.one
np.ones(4) # vetor de 4 elementos
array([ 1., 1., 1., 1.])
np.ones((4,3)) # matriz 4 x 3
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
Função para gerr matriz identidade
print('Matriz Identidade = ', np.eye(4)) #Criar matriz identidade
Matriz Identidade = [[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]]
a = np.array([[1, 2, 3], [4, 5, 6],[7,8,9]]) #numpy array usado nos exemplo
# Para saber o formato do NumPy array use 'shape'
print('shape = ', a.shape)
shape = (3, 3)
# Para saber o numero de dimensoes use 'n.dim:.
print('dimensão = ', a.ndim)
dimensão = 2
# descrever tipo de elementos do array use 'dtype.name'
print('tipo = ', a.dtype.name)
tipo = int32
# o tamanho em bytes de cada elemento do array.
print('tamanho em bytes = ', a.itemsize)
tamanho em bytes = 4
# o total do numero de elementos do array.
print('numero total de elementos = ', a.size)
numero total de elementos = 9
#Use type para verificar a classe
print('tipo = ', type(a))
tipo = <class 'numpy.ndarray'>
NumPy possui várias formas de criar números aleatórios tendo como base a função random: ##### rand Numpy.random.rand cria um array com uma da forma e a preenche com valores aleatórios de uma distribuição uniforme no intervalo [0, 1).
np.random.rand(1) # retorna uma amostra com um vetor aleatorio
array([ 0.37968688])
np.random.rand(3) #retorna amostra com três vetores alatorios
array([ 0.65047196, 0.19279372, 0.81631168])
np.random.rand(5,5) # retorna uma amostra em forma de matriz 5x5
array([[ 0.8472542 , 0.34438088, 0.45256742, 0.40567087, 0.46506589],
[ 0.40712275, 0.05849472, 0.32014203, 0.21508325, 0.62038965],
[ 0.82596773, 0.29950452, 0.29034161, 0.0141033 , 0.23191333],
[ 0.01414772, 0.88884345, 0.28485843, 0.86993334, 0.58552488],
[ 0.43318771, 0.76587123, 0.98934418, 0.00782164, 0.17773894]])
Retornar uma amostra (ou amostras) da distribuição “normal padrão”. Ao contrário do rand, que é uniforme:
np.random.randn(4)
array([-0.91926231, 1.23764068, 0.18680237, 1.91195893])
np.random.randn(4,5)
array([[ 1.59330483, -0.74653643, 0.5311757 , -0.53861642, -0.611056 ],
[ 0.27707078, -1.29064321, 0.05725259, -0.74814818, 0.35700817],
[-0.54676309, -1.04873183, -0.76461313, -2.09812475, -0.48114056],
[ 1.63077661, -0.62706014, -1.31865117, 0.60046109, 0.68462824]])
Retorna números inteiros aleatórios incluindo o número inferior e excluindo o superior.
print('um unico numero inteiro entre 24 e 110 = ', np.random.randint(24, 110)) # por padrão só retorna 1 valor
um unico numero inteiro entre 24 e 110 = 41
print('10 numeros inteiros entre 24 e 110 = ', np.random.randint(24, 110, 10))
10 numeros inteiros entre 24 e 110 = [ 84 91 70 108 67 27 92 52 53 82]
Remodelar NumPy Array pode ser feito através do método “reshape”
#Definimos um array de shape(forma) (1, 25)
arr = np.arange(0, 25)
print('Array com dimensão (1, 25) = ', arr)
Array com dimensão (1, 25) = [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
#Alterando as dimensões de (1, 25) para (25, 1).
mod_array = arr.reshape(25, 1)
print('Array com dimensão (25, 1) = ', mod_array)
Array com dimensão (25, 1) = [[ 0]
[ 1]
[ 2]
[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]]
arr = np.arange(0, 10)
arr2 = np.array([2,4,6,7,8,9,11,34,6,78])
print(arr)
[0 1 2 3 4 5 6 7 8 9]
print(arr2)
[ 2 4 6 7 8 9 11 34 6 78]
arr+2 # soma 2 a cada elemento
array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
arr*3 # multiplica por 3
array([ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27])
arr2-3 # subtrai 3
array([-1, 1, 3, 4, 5, 6, 8, 31, 3, 75])
#soma elementos correspondetes
print('arr + arr2 = ', arr + arr2)
arr + arr2 = [ 2 5 8 10 12 14 17 41 14 87]
#subtração
print('arr - arr2 = ', arr - arr2)
arr - arr2 = [ -2 -3 -4 -4 -4 -4 -5 -27 2 -69]
#multiplicação
print('arr x arr2 = ', arr * arr2)
arr x arr2 = [ 0 4 12 21 32 45 66 238 48 702]
#divisão
print('arr / 4 = ', arr / 4)
arr / 4 = [ 0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. 2.25]
Usando funções matematicas no array:
arr = np.arange(0, 10)
#Raiz quadrada arr
print('Raiz quadrada de arr = ', np.sqrt(arr))
Raiz quadrada de arr = [ 0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
#Exponencial de arr
print('Exponencial de arr = ', np.exp(arr))
Exponencial de arr = [ 1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
2.98095799e+03 8.10308393e+03]
#Sine of arr
print('Sine of arr = ', np.sin(arr))
Sine of arr = [ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427
-0.2794155 0.6569866 0.98935825 0.41211849]
#Log of arr
print('Log of arr = ', np.log(arr)) # observe que na primeira entrada ocorreu erro por não existir log de zero
Log of arr = [ -inf 0. 0.69314718 1.09861229 1.38629436 1.60943791
1.79175947 1.94591015 2.07944154 2.19722458]
C:\Users\pcnov\Documents\davi\lib\site-packages\ipykernel\__main__.py:2: RuntimeWarning: divide by zero encountered in log
from ipykernel import kernelapp as app
import numpy as np
arr = np.arange(0, 25)
print('arr = ', arr)
#Para acessar um elemento usamos o indice = n-1 lembrando que o python começa a contar do zero
print('9º elemento de arr = ', arr[8])
arr = [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
9º elemento de arr = 8
Podemos acessar vários elementos ao mesmo tempo
#Acesssar elementos da posição 1 a 6
arr[:5]
array([0, 1, 2, 3, 4])
arr[1:5]
array([1, 2, 3, 4])
arr[-1] # indice negativo começa do ultimo valor
24
arr[::-1]
array([24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8,
7, 6, 5, 4, 3, 2, 1, 0])
Era isso que queria mostrar. Espero que tenha aprendido um pouco sobre essa biblioteca do python. Até a próxima!
Keep calm and analysing data!