PyCCA: mudanças entre as edições

De Pontão Nós Digitais
Ir para navegaçãoIr para pesquisar
Linha 14: Linha 14:
numero_de_nos = 50; # numero de agentes
numero_de_nos = 50; # numero de agentes
total_time = 500; # total time steps
total_time = 500; # total time steps
a = np.random.randint(0,2,(numero_de_nos,numero_de_nos)); # random graph
a = np.random.randint(0,2,(numero_de_nos,numero_de_nos)); # random graph (4*)
randomnet =  (a + a.T)/2 + (a + a.T)%2 - np.diag(np.diag((a + a.T)/2 + (a + a.T)%2)); # symmetrical adjacency matrix or it will be a digraph, diagonal subtracted for no auto interactions
randomnet =  (a + a.T)/2 + (a + a.T)%2 - np.diag(np.diag((a + a.T)/2 + (a + a.T)%2)); # symmetrical adjacency matrix or it will be a digraph, diagonal subtracted for no auto interactions (4*)
fields = np.random.rand(numero_de_nos); # node fields, or agents atributs
fields = np.random.rand(numero_de_nos); # node fields, or agents atributs (2*)
nonz = randomnet.nonzero(); # 2 dim-tuple with array counting indexes of connected nodes
nonz = randomnet.nonzero(); # 2 dim-tuple with array counting indexes of connected nodes
nonznum = len(nonz[0][:]); # number of edges
nonznum = len(nonz[0][:]); # number of edges
edges = [(nonz[0][v],nonz[1][v]) for v in range(nonznum)]; # the edges of the random graph
edges = [(nonz[0][v],nonz[1][v]) for v in range(nonznum)]; # the edges of the random graph
interact = 0; # interaction process, the mean of the two field
interact = 0; # interaction process, the mean of the two field in this case


while total_time > 0:
while total_time > 0:
     sorteio_interacao = np.random.randint(0,nonznum,(1)); # the edge(interaction) sampling process
     sorteio_interacao = np.random.randint(0,nonznum,(1)); # the edge(interaction) sampling process (1*)
     interact = float(fields[edges[sorteio_interacao[0]][0]]+fields[edges[sorteio_interacao[0]][1]])/2;
     interact = float(fields[edges[sorteio_interacao[0]][0]]+fields[edges[sorteio_interacao[0]][1]])/2; # (3*)
     fields[edges[sorteio_interacao[0]][0]] = float(fields[edges[sorteio_interacao[0]][0]] + interact)/2;
     fields[edges[sorteio_interacao[0]][0]] = float(fields[edges[sorteio_interacao[0]][0]] + interact)/2; # (2*) (3*)
     fields[edges[sorteio_interacao[0]][1]] = float(fields[edges[sorteio_interacao[0]][1]] + interact)/2;
     fields[edges[sorteio_interacao[0]][1]] = float(fields[edges[sorteio_interacao[0]][1]] + interact)/2; # (2*) (3*)
     print fields;
     print fields;
     total_time = total_time - 1;
     total_time = total_time - 1;
Linha 33: Linha 33:


Notas
Notas
* Neste exemplo agentes interagem com igual probabilidade P = 1/(numero de arestas na rede), ou seja igual probabilidade;
1* Neste exemplo agentes interagem com igual probabilidade P = 1/(numero de arestas na rede), ou seja igual probabilidade;
* Cada agente tem uma propriedade, numero real, alocado em fields;
2* Cada agente tem uma propriedade, numero real, alocado em fields;
* A interacao eh um filtro de altas frequencias no atributo do no/agente, ou seja a interacao e homofilica/homogeinizadora;
3* A interacao eh um filtro de altas frequencias no atributo do no/agente, ou seja a interacao e homofilica/homogeinizadora;
* A rede eh aleatoria.
4* A rede eh aleatoria.
* Para gerar modelo de agentes em redes complexas diferente, mais realista, eh necessario generalizar qualquer um destes pontos.
5* Para gerar modelo de agentes em redes complexas diferente, mais realista, eh necessario generalizar qualquer um destes pontos no local indicado no codigo atraves dos numeros das notas.


== Processamento de Imagens ==
== Processamento de Imagens ==

Edição das 00h23min de 14 de março de 2013

Python, Computação Científica e Aplicações

FAQ/Tutorial sobre achados e notas nas aplicações de Python para Computação Científica.

Redes Complexas

((( Ver também ARS )))

Como simular agentes difusores aleatorios ?

import numpy as np

numero_de_nos = 50; # numero de agentes
total_time = 500; # total time steps
a = np.random.randint(0,2,(numero_de_nos,numero_de_nos)); # random graph (4*)
randomnet =  (a + a.T)/2 + (a + a.T)%2 - np.diag(np.diag((a + a.T)/2 + (a + a.T)%2)); # symmetrical adjacency matrix or it will be a digraph, diagonal subtracted for no auto interactions (4*)
fields = np.random.rand(numero_de_nos); # node fields, or agents atributs (2*)
nonz = randomnet.nonzero(); # 2 dim-tuple with array counting indexes of connected nodes
nonznum = len(nonz[0][:]); # number of edges
edges = [(nonz[0][v],nonz[1][v]) for v in range(nonznum)]; # the edges of the random graph
interact = 0; # interaction process, the mean of the two field in this case

while total_time > 0:
    sorteio_interacao = np.random.randint(0,nonznum,(1)); # the edge(interaction) sampling process  (1*)
    interact = float(fields[edges[sorteio_interacao[0]][0]]+fields[edges[sorteio_interacao[0]][1]])/2; # (3*)
    fields[edges[sorteio_interacao[0]][0]] = float(fields[edges[sorteio_interacao[0]][0]] + interact)/2; # (2*) (3*)
    fields[edges[sorteio_interacao[0]][1]] = float(fields[edges[sorteio_interacao[0]][1]] + interact)/2; # (2*) (3*)
    print fields;
    total_time = total_time - 1;

Notas 1* Neste exemplo agentes interagem com igual probabilidade P = 1/(numero de arestas na rede), ou seja igual probabilidade; 2* Cada agente tem uma propriedade, numero real, alocado em fields; 3* A interacao eh um filtro de altas frequencias no atributo do no/agente, ou seja a interacao e homofilica/homogeinizadora; 4* A rede eh aleatoria. 5* Para gerar modelo de agentes em redes complexas diferente, mais realista, eh necessario generalizar qualquer um destes pontos no local indicado no codigo atraves dos numeros das notas.

Processamento de Imagens

((( Ver também PythonImagem )))

Como abrir uma imagem?

from PIL import Image
im = Image.open('foo.jpg')

Como converter em escala de cinza?

im_cinza = im.convert('L')

Como equalizar uma imagem por histograma?

from PIL import ImageOps
im_eq = ImageOps.equalize(im_cinza)

Como aplicar uma função qualquer com janelamento de 3x3? Ou, como aplicar um filtro qualquer com janelamento?

No caso, vamos aplicar a função entropia em cada pixel da imagem. A função entropia recebe como argumento os 9 vizinhos do pixel, já que o tamanho da janela (argumento size da função generic_filter) é equivalente a 3. A função entropia retorna o novo valor do pixel.

from scipy import ndimage

def entropia(viz):
    viz = list(viz)
    qtd = [viz.count(x) for x in viz]
    prob = [viz[i]/qtd[i] for i in range(len(viz))]
    return n.sum([-x*n.log(x) for x in prob if x != 0])

im_entropia = ndimage.generic_filter(im_cinza, entropia, size=3)

Como calcular o valor de entropia de uma imagem inteira?

def entropia(im, nbr_bins=256):
    hist = im.histogram()
    hist_length = sum(hist)
    samples_probability = [float(h) / hist_length for h in hist]
    return sum([-p * log(p) for p in samples_probability if p != 0])

v_entropia = entropia(im_cinza)

Como calcular os valores de energia de uma imagem?

from scipy import fftpack
energias = fftpack.fft2(im_cinza).real**2 + fftpack.fft2(im_cinza).imag**2

Processamento de Áudio e Música

((( Ver também PythonMusica, AudioArt, Massa )))