Data Science do zero: Primeiras regras com o Python


def shape(A): num_rows = len(A) num_cols = len(A[0]) if



Baixar 5.26 Mb.
Pdf preview
Página40/75
Encontro24.07.2022
Tamanho5.26 Mb.
#24344
1   ...   36   37   38   39   40   41   42   43   ...   75
Data Science do zero - Primeiras regras
def shape(A):
num_rows = len(A)
num_cols = len(A[0]) if A else 0 # número de elementos na primeira linha
return num_rows, num_cols
Se uma matriz possui n linhas e k colunas, nos referiremos a ela como uma
matriz n x k. Podemos (e, às vezes, iremos) pensar em cada linha de uma matriz
n x k como um vetor de tamanho k, e cada coluna como um vetor de tamanho n:
def get_row(A, i):
return A[i] # A[i] já é da linha A[i] é linha i-ésimo
def get_column(A, j):
return [A_i[j] # j-ésimo elemento da linha A_i
for A_i in A] # para cada linha A_i
Também queremos saber como criar matrizes dadas sua forma e uma função
para produzir seus elementos. Podemos fazer isso usando uma compreensão de


lista aninhada:
def make_matrix(num_rows, num_cols, entry_fn):
"""retorna a matriz num_rows X num_cols
cuja entrada (i,j)th é entry_fn(i, j)"""
return [[entry_fn(i, j) # dado i, cria uma lista
for j in range(num_cols)] # [entry_fn(i, 0), ... ]
for i in range(num_rows)] # cria uma lista para cada i
Dada esta função, você poderia fazer uma matriz de identidade 5 × 5 (com 1s na
diagonal e 0s nos demais lugares) com:
def is_diagonal(i, j):
"""1's na diagonal, 0's nos demais lugares"""
return 1 if i == j else 0
# [[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]]
As matrizes serão importantes para nós de diversas formas.
Primeiro, podemos usar uma matriz para representar um conjunto de dados
consistindo de múltiplos vetores, simplesmente considerando cada vetor como
uma linha da matriz. Por exemplo, se você tivesse a altura, o peso e a idade de
1000 pessoas, você poderia colocá-los em uma matriz 1000 × 3:
data = [[70, 170, 40],
[65, 120, 26],
[77, 250, 19],
# ....
]
Segundo, como veremos mais tarde, podemos usar uma matriz n × k para
representar uma função linear que mapeia vetores dimensionais k para vetores
dimensionais n. Nossas várias técnicas e conceitos englobarão tais funções.
Terceiro, as matrizes podem ser usadas para representar relações binárias. No
Capítulo 1, representamos as extremidades de uma rede como uma coleção de
pares
(i, j)
. Uma representação alternativa seria criar uma matriz
A
tal que
A[i][j]
seja 1 se os nodos i e j estejam conectados e 0 de outra forma.


Lembre-se de que tínhamos antes:
friendships = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (3, 4),
(4, 5), (5, 6), (5, 7), (6, 8), (7, 8), (8, 9)]
Também poderíamos representar desta forma:
# usuário 0 1 2 3 4 5 6 7 8 9
#
friendships = [[0, 1, 1, 0, 0, 0, 0, 0, 0, 0], # user 0
[1, 0, 1, 1, 0, 0, 0, 0, 0, 0], # user 1
[1, 1, 0, 1, 0, 0, 0, 0, 0, 0], # user 2
[0, 1, 1, 0, 1, 0, 0, 0, 0, 0], # user 3
[0, 0, 0, 1, 0, 1, 0, 0, 0, 0], # user 4
[0, 0, 0, 0, 1, 0, 1, 1, 0, 0], # user 5
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 6
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 7
[0, 0, 0, 0, 0, 0, 1, 1, 0, 1], # user 8
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]] # user 9
Se tivermos poucas conexões, essa será uma representação muto fraca já que
você terá que completar o armazenamento com diversos zeros. No entanto, com
a representação da matriz é bem mais fácil verificar se os dois nodos estão
conectados — você apenas tem que procurar na matriz em vez de procurar
(possivelmente) cada extremidade:
friendships[0][2] == 1 # True, 0 e 2 são amigos
friendships[0][8] == 1 # False, 0 e 8 não são amigos
Da mesma forma, para encontrar as conexões que um nodo possui, você precisa
apenas inspecionar a coluna (ou a linha) correspondente àquele nodo:
friends_of_five = [i # somente precisamos

Baixar 5.26 Mb.

Compartilhe com seus amigos:
1   ...   36   37   38   39   40   41   42   43   ...   75




©historiapt.info 2022
enviar mensagem

    Página principal