Ir para o conteúdo
Karolas

[Dúvida] Trabalho em Matlab/Octave

Mensagens Recomendadas

Karolas

Boas,

Estou a fazer um trabalho, para uma cadeira de programação e estou a ter algumas dúvidas.

Está aqui o enunciado:

http://pdfcast.org/pdf/trabalho-matlab-octave

Já fiz duas funções: uma para ler o url e outra para juntar todas as 36 amostras numa tabela.

Agora não consigo fazer uma função para separar os cancerosos(os que acabam em em 1) e os não cancerosos(acabem em 2)

estão aqui as duas funções criadas:

function dados=ledados(url)
%dados=ledados(url)
%recebe o url das amostras
%devolve a matriz numérica da amostra com os dados dos 400 genes
%e o ultimo valor indica se é ou não um tecido canceroso
 [dadosStr,sucesso]=urlread(url);
 if sucesso
   dados=str2num(dadosStr);
 else
   dados=[];
   disp('whop whop');
 end
end

function dado=tabela(vector)
%dado=tabela(vector)
%recebe os vectores contidos num determinado url
%devolve as matrizes numéricas contidos no url e coloca-os
%a todos em colunas seguidas
 for k=1:length(vector);
   b=num2str(k);
   a=strcat(vector, 'amostra',b);
   u=ledados(a);
   for j=1:length(u);
     v(j,k)=u(j);
   end
 end
 dado=v
end

Editado por Rui Carlos
Tag da linguagem no código.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Karolas

Resumidamente o trabalho é o seguinte:

Temos o seguinte url http://ssdi.di.fct.unl.pt/ice/b/tp1/ , que tem 36 amostras.

http://ssdi.di.fct.unl.pt/ice/b/tp1/amostra1, http://ssdi.di.fct.unl.pt/ice/b/tp1/amostra2 até http://ssdi.di.fct.unl.pt/ice/b/tp1/amostra36, têm cada uma 401 linhas. Da linha 1 até à linha 400, representam 400 genes. A linha 401 apenas indica se o tecido é canceroso (aparece 1) ou não aparece (2).

O primeiro passo é colocar todas as amostras em colunas como mostra o seguinte exemplo:

image.jpg

Ou seja fica com uma matriz 401x36.

Esta já esta feita é a tabela(url) acima postada.

O segundo passo é fazer uma função que separe os tecidos cancerosos dos não cancerosos, ou seja, duas matrizes uma com os 1 no final e outra com os 2 no final.

O terceiro e quarto passos, são criar uma função para a média e outra para o desvio padrão de cada gene (linha) e juntá-las às duas matrizes anteriormente separadas aqui vai um exemplo de como deverá ser o resultado final:

Cancerosos

image.jpg

Não canceroso

image.jpg

Depois disto é criar uma função para a calcular a discrepância, a discrepância é calculada de seguinte forma:

image.jpg

Depois aparece algo assim:

image.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

Para o primeiro caso, precisas de criar duas matrizes (m1 e m2).

Depois percorres as colunas da matriz com as amostras, e dependendo do valor da última linha, escolhes a matrix a adicionar.

Tens ainda que remover a última linha, que deve ser algo do género m11 = m1(1:400, :).

Podes também ver esta discussão, pois o Matlab até deve permitir fazer a separação sem ciclos e condicionais, mas não tenho o Matlab instalado para testar. Qualquer coisa como m1 = m(:,m(401, :) == 1).

Para média e afins, o Matlab tem uma função que faz exactamente o que precisas: mean. (Repara que essa função já lida com matrizes. Vê o segundo exemplo para o teu caso.)

Para o desvio padrão, penso que tens que usar a função std.

Depois é só adicionares as colunas às matrixes ([m1 vector_com_avg vector_com_std]).

Neste ponto, convém que já saibas resolver o resto sozinho.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FCT_Tf

Karolas, tudo bem?

Por acaso também estou a fazer o mesmo genero de trabalho, só que o enunciado é diferente e tenho 36 amostras e 400 dados.

Só que não estou nem estou a conseguir criar o segundo programa que lê as amostras do link, so consegui fazer o primeiro ficheiro que lê o ficheiro total, não me podes dar uma ajuda sff? Não consiguo fazer o inicio quanto mais chegar a imagem no final do trabalho...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.