08 NumPy Flashcards
import numpy as np
import panda as pd
padrão na comunidade Python
a1D = np.array([1, 2, 3])
a1D
»»»>
array([1, 2, 3])
O objeto criado é um ndarray: n-dimensional array #
type(a1D)
»»»
numpy.ndarray
a1D.dtype >>>>>>> dtype('int32') # na aula foi int64, não sei pq #
b1D = np.array ( [1, 2, 3], dtype = float) print(b1D) b1D.dtype >>>>>> [1. 2. 3.] dtype('float64') # poderia ser str
d1D = np.array([1, 3.14, "NumPy", True]) d1D >>>>>>> array(['1', '3.14', 'NumPy', 'True'], dtype='>>>>>> array([1. , 3.14, 0. , 1. ])
ndarray suporta somente um único de dado
se misturar na hora de criar a ndarray, Python vai criar de acordo com:
str>float>int>bool
ndarrays de mais de 1 dimensão
2 dimensões (linha x coluna)
a2D = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9]]) a2D >>>>>>> array ( [ [ 1, 2, 3], [4, 5, 6], [7, 8, 9 ] ] )
3 dimensões (linha x coluna x face/página)
a3D = np.array( [ [ [1,2,3], [4,5,6], [7,8,9] ], [ [11,12,13], [14,15,16], [17,18,19] ], [ [21,22,23], [24,25,26], [27,28,29] ]])
a3D
»»»»»
array( [ [ [ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9] ],
[ [11, 12, 13], [14, 15, 16], [17, 18, 19] ], [ [21, 22, 23], [24, 25, 26], [27, 28, 29] ] ] )
# 3 dimensões czeros = np.zeros((3, 4, 2)) # 3 páginas, 4 linhas e 2 colunas czeros >>>>>>>>> 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.]]])
poderia colocar dtype pra escolher outro tipo
dzeros = np.zeros((2, 3, 4), dtype = str)
dzeros
»»»>
array([[[’’, ‘’, ‘’, ‘’],
[’’, ‘’, ‘’, ‘’],
[’’, ‘’, ‘’, ‘’]],
[['', '', '', ''], ['', '', '', ''], ['', '', '', '']]], dtype='
4 dimensões
f_um_4D = np.ones((2, 4, 2, 3), dtype=bool)
f_um_4D
»»»»
1D
Linha
2D
Linha x Coluna
3D
Página x Linha x Coluna
4D
Vetor de Cubos (?)
etc…
array([[[[ True, True, True],
[ True, True, True]],
[[ True, True, True], [ True, True, True]], [[ True, True, True], [ True, True, True]], [[ True, True, True], [ True, True, True]]], [[[ True, True, True], [ True, True, True]], [[ True, True, True], [ True, True, True]], [[ True, True, True], [ True, True, True]], [[ True, True, True], [ True, True, True]]]])
ndarrays vs listas normais do Python?
ndarrays são muito mais rápidas
a1D = np.arange(10)
a1D
»»»>
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b1D = np.arange(5, 15)
b1D
»»»>
array([ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
c1D = np.arange(5,100, 10)
c1D
»»»>
array([ 5, 15, 25, 35, 45, 55, 65, 75, 85, 95])
d1D = np.linspace(0,10, 2) # Cria um array com 2 valores entre 0 e 10
d1D
»»»»>
array([ 0., 10.])
e1D = np.linspace(0,10, 4) # Cria um array com 2 valores entre 0 e 10
e1D
»»»»>
array([ 0. , 3.33333333, 6.66666667, 10. ])
g1D = np.linspace(1,1000, dtype = int)
g1D
»»»»»»
array([ 1, 21, 41, 62, 82, 102, 123, 143, 164, 184, 204, 225, 245, 266, 286, 306, 327, 347, 367, 388, 408, 429, 449, 469, 490, 510, 531, 551, 571, 592, 612, 633, 653, 673, 694, 714, 734, 755, 775, 796, 816, 836, 857, 877, 898, 918, 938, 959, 979, 1000])
# Se não for passada a quantidade de elementos, o padrão é gerar 50 elementos
# gerando int, a função simplesmente corta as casas decimais (ou seja, arredonda sempre para baixo)
h1D = np.linspace(0,50, 10, endpoint = True, dtype=int)
h1D
»»»»»
array([ 0, 5, 11, 16, 22, 27, 33, 38, 44, 50])
# O valor final é incluído
i1D = np.linspace(0,50, 10, endpoint = False, dtype=int)
i1D
»»»»>
array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45])
# O valor final não é incluído
# ndarray contendo 10 números 5 a1D = np.full(10, 5) a1D >>>>>>> array([5, 5, 5, 5, 5, 5, 5, 5, 5, 5])
# ndarray de 3 linhas e 5 colunas contendo o número 3 a2D = np.full((3, 5), 3) a2D >>>>>>> array([[3, 3, 3, 3, 3], [3, 3, 3, 3, 3], [3, 3, 3, 3, 3]])
# ndarray de 2 páginas, 3 linhas e 4 colunas contendo o número -1 a3D = np.full((2, 3, 4), -1) a3D >>>>>>>> array([[[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]],
[[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]]])
# Cria uma matriz 5x5 preenchida com 1s na diagonal principal e 0 nas posições restantes ident = np.eye(5) ident >>>>>>>> array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])
Cria um ndarray com 10 elementos entre 0 e 99
a1D = np.random.randint(0, 100, 10)
a1D
»»»>
array([90, 82, 66, 5, 82, 84, 17, 18, 10, 5])
a2D = np.random.randint(1, 500, (4,5)) a2D >>>>>>> array([[325, 394, 186, 400, 438], [ 35, 98, 61, 139, 71], [476, 86, 437, 280, 474], [295, 390, 72, 441, 309]])
# Gerando 10 combinações para a mega-sena # Valores vão de 1 a 60, 10 páginas, 1 linha, 6 colunas a3D = np.random.randint(1,61,(10,1,6)) a3D >>>>>>>> array([[[ 4, 12, 51, 43, 4, 26]], [[20, 58, 27, 32, 36, 36]], [[40, 53, 24, 60, 39, 12]], [[49, 21, 11, 5, 10, 31]], [[35, 35, 31, 14, 19, 39]], [[ 2, 10, 46, 23, 45, 15]], [[41, 15, 41, 58, 28, 33]], [[20, 7, 56, 38, 6, 50]], [[20, 37, 36, 3, 45, 47]], [[14, 37, 33, 41, 55, 55]]])
# Cria um ndarray de 3 linhas e 2 colunas contendo elementos aleatórios entre 0 e 1 c2D = np.random.random((3,2)) c2D >>>>>>>>> array([[0.30789558, 0.8570651 ], [0.41280201, 0.00804518], [0.73345547, 0.01438448]])
# Cria um ndarray de 2 páginas x 4 linhas x 5 colunas com elementos entre 1 e 100 a3D = np.random.randint(1, 101, (2,4,5)) a3D >>>>>>>> array([[[ 22, 32, 15, 77, 71], [ 87, 72, 58, 37, 41], [ 74, 22, 32, 87, 14], [ 75, 25, 61, 34, 2]],
[[ 92, 75, 20, 49, 38], [ 67, 2, 51, 100, 4], [ 23, 47, 2, 4, 94], [ 56, 52, 32, 66, 79]]])
a3D.shape
»»»»>
(2,4,5)
a3D.ndim
»»»»>
3
a3D.size
»»»»
40
Retorna o tamanho da 1a dimensão (quantidade de páginas)
len(a3D)
»»»»
2
Retorna o tamanho da 2a dimensão (quantidade de linhas)
len(a3D[0])
»»»»
4
Retorna o tamanho da 3a dimensão (quantidade de colunas)
len(a3D[0][0])
»»»»
5
a3D.dtype
»»»»
dtype(‘int32’)
a3D.dtype.name
»»»»
‘int32’
# Cria um ndarray de 2 páginas x 4 linhas x 5 colunas com elementos entre 1 e 100 a3D = np.random.randint(1, 101, (2,4,5)) a3D >>>>>>>>> array([[[86, 49, 14, 68, 47], [68, 43, 45, 6, 1], [56, 89, 63, 92, 99], [39, 29, 55, 96, 89]],
[[68, 76, 11, 6, 71], [97, 28, 85, 23, 91], [31, 85, 79, 27, 21], [47, 35, 11, 55, 67]]])
nome_do_cubo[página][linha][coluna]
a3D[1][0][3]
»»»>
6
a3D[0][3][1]
»»»>
29
indice_pag = [0, 1, 1, 1] indice_lin = [0, 1, 2, 3] indice_col = [3, 2, 1, 0] a3D[indice_pag, indice_lin, indice_col] >>>>>>>>> array([68, 85, 85, 47])
# Cria um ndarray de 4 linhas x 5 colunas com elementos entre 1 e 100 a2D = np.random.randint(1, 101, (4,5)) a2D >>>>>>>> array([[89, 75, 92, 15, 90], [22, 12, 25, 74, 79], [99, 43, 6, 17, 66], [73, 57, 21, 17, 37]])
a2D[:,[0,1,2,0]] >>>>>>>>> array([[89, 75, 92, 89], [22, 12, 25, 22], [99, 43, 6, 99], [73, 57, 21, 73]]) # pega todas as linhas (:) # pega os elementos nas colunas 0, 1, 2 e 0 em cada uma delas, em ordem
a2D [ : , [ 0,1,2,0 ] ] [ [ 1, 0, 1, 0 ] ] == a2D [ [ 1, 0, 1, 0 ] ] [ : , [0,1,2,0] ] >>>>>>>>> array([[22, 12, 25, 22], [89, 75, 92, 89], [22, 12, 25, 22], [89, 75, 92, 89]]) # pega todas as linhas # pega os elementos 0,1,2,0 das linhas 1,0,1,0 nessa ordem
a3D >>>>>>>>> array([[[86, 49, 14, 68, 47], [68, 43, 45, 6, 1], [56, 89, 63, 92, 99], [39, 29, 55, 96, 89]],
[[68, 76, 11, 6, 71], [97, 28, 85, 23, 91], [31, 85, 79, 27, 21], [47, 35, 11, 55, 67]]])
subface1 = a3D[1 , 0:3 , 1:4] subface1 >>>>>>>> array([[76, 11, 6], [28, 85, 23], [85, 79, 27]]) # face 1, linha 0, 1 e 2, coluna 1, 2 e 3
invertido = a3D[::-1, ::-1, ::-1] invertido >>>>>>>> array([[[67, 55, 11, 35, 47], [21, 27, 79, 85, 31], [91, 23, 85, 28, 97], [71, 6, 11, 76, 68]],
[[89, 96, 55, 29, 39], [99, 92, 63, 89, 56], [ 1, 6, 45, 43, 68], [47, 68, 14, 49, 86]]])
# Cria um ndarray de 4 linhas x 5 colunas com elementos entre 1 e 100 a2D = np.random.randint(1, 101, (4, 5)) a2D >>>>>>>> array([[29, 39, 49, 91, 28], [47, 56, 27, 73, 74], [86, 83, 51, 29, 35], [97, 60, 22, 91, 23]])
a2D >= 50
»»»»>
array([[False, False, False, True, False],
[False, True, False, True, True],
[ True, True, True, False, False],
[ True, True, False, True, False]])
# retorna se é True or False a comparação
a2D[a2D >= 50]
»»»»>
array([91, 56, 73, 74, 86, 83, 51, 97, 60, 91])
# retorna os valores em que é verdadeiro
a2D.mean ( )
»»»
54.5
# retorna a média
a2D[a2D <= a2D.mean()]
»»»»
array([29, 39, 49, 28, 47, 27, 51, 29, 35, 22, 23])
# retorna o que é menor do que a média
a3D = np.random.randint(1,200, (2,3,6)) a3D >>>>>>>>>> array([[[194, 117, 99, 175, 134, 162], [149, 19, 128, 10, 130, 17], [ 25, 24, 198, 143, 184, 122]],
[[160, 37, 187, 197, 194, 79], [ 16, 127, 78, 191, 69, 147], [ 64, 102, 179, 106, 138, 184]]])
a3D[1][2][4] = -1 a3D >>>>>>> array([[[194, 117, 99, 175, 134, 162], [149, 19, 128, 10, 130, 17], [ 25, 24, 198, 143, 184, 122]],
[[160, 37, 187, 197, 194, 79], [ 16, 127, 78, 191, 69, 147], [ 64, 102, 179, 106, -1, 184]]])
a3D_modificado = np.append(a3D, [100, 130])
a3D_modificado
»»»»»
array([194, 117, 99, 175, 134, 162, 149, 19, 128, 10, 130, 17, 25,
24, 198, 143, 184, 122, 160, 37, 187, 197, 194, 79, 16, 127,
78, 191, 69, 147, 64, 102, 179, 106, -1, 184, 100, 130])
# Lineariza a3D e insere os elementos no final
a3D = np.random.randint(1,200, (2,3,6)) a3D >>>>> array([[[ 17, 118, 37, 34, 121, 120], [ 24, 81, 58, 128, 144, 122], [ 73, 156, 187, 133, 34, 191]],
[[ 69, 86, 192, 146, 80, 163], [ 58, 92, 8, 172, 162, 70], [ 39, 168, 143, 89, 140, 49]]])
a3D_modificado2 = np.delete(a3D, [0, 1, 3])
print(a3D_modificado2)
»»»»
[ 37 121 120 24 81 58 128 144 122 73 156 187 133 34 191 69 86 192
146 80 163 58 92 8 172 162 70 39 168 143 89 140 49]