convert binary to charaacter
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Abirami
 el 15 de Ag. de 2014
  
    
    
    
    
    Editada: Azzi Abdelmalek
      
      
 el 16 de Ag. de 2014
            hello,
 i have a binary sequnce 10110001. and i want to encode based on the following rule
A=00
C=01
T=10
G=11
and the answer i get will be something like TGAC.
i want to do it for a 256*256 matrix each element having an 8bit binary sequence..i have generated the matrix by using the following code
>>a=imread('C:\Users\Abzz\Desktop\lena.png');
>>disp(a);
>>imshow(a);
>>for i=1:1:256
>>for j=1:1:256
>>b{i,j,1} = dec2bin(a(i,j),8);
>>end
>>end
>>disp(b)
pls help..thanks in advance
0 comentarios
Respuesta aceptada
  Guillaume
      
      
 el 15 de Ag. de 2014
        
      Editada: Guillaume
      
      
 el 15 de Ag. de 2014
  
      Personally, if I was going to do that encoding several times, I would precompute the encoding for all the possible values (there's only 256 of them) and use the precomputed array to do the conversion using basic matrix indexing. Thus the expensive calculation you only do once and the conversion from matrix to sequence is a simple array lookup, thus very fast.
You can precompute the array many different ways. A fairly simple one:
sequences = 'ACTG'; %in the order 0,1,2,3
seqbase4 = dec2base(0:255, 4); %convert integer 0-255 to a sequence of 0123
int2sequence = num2cell(sequences(seqbase4-'0'+1), 2); %represents integer 0-255 as cell array of ACTG
Whenever you want to convert a matrix, it's then as simple as:
a=imread('C:\Users\Abzz\Desktop\lena.png');
s=int2sequence(a+1); %+1 because matlab indexes start at 1
Más respuestas (1)
  Azzi Abdelmalek
      
      
 el 15 de Ag. de 2014
        
      Editada: Azzi Abdelmalek
      
      
 el 15 de Ag. de 2014
  
      str='10110001'
c='ACTG'
b={'00','01','10','11'}
ss=regexp(str,'.{2}','match')
[ii,jj]=ismember(ss,b)
out=c(jj)
%or
str='10110001'
c='ACTG'
out=c(bin2dec(regexp(str,'.{2}','match'))+1)
%or
str='10110001'
c='ACTG'
out=c(bin2dec(reshape(str,2,[])')+1)
10 comentarios
  Guillaume
      
      
 el 16 de Ag. de 2014
				Have you tried what I wrote in my answer? Does it not work for you? If it doesn't, which step is the problem?
  Azzi Abdelmalek
      
      
 el 16 de Ag. de 2014
				
      Editada: Azzi Abdelmalek
      
      
 el 16 de Ag. de 2014
  
			a=imread('C:\Users\Abzz\Desktop\lena.png');
[n,m]=size(a);
b=arrayfun(@(x) dec2bin(x,8),a,'un',0);
c='ACTG';
out=cellfun(@(x) c(bin2dec(reshape(x,2,[])')+1),b,'un',0)
Note that Guillaume's method is faster, and do not need to convert your matrix from decimal to binary
Ver también
Categorías
				Más información sobre Logical en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


