multiplying/dividing matrices that contain string variables and NaN
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Dear all
I have
 I have
A= [
29     1;
27     4;
31     0;
28     3;
25     5;
]
and
 B={'id1'  'id2' 'id3' 'id4'
 [0.4607]    [0.4400]   [ 0.9167]    [0.8701] 
    [0.4400]    [0.4432]   [ NaN]   [ 0.8808] 
    [0.4432]   [ 0.4419]   [ 0.8808]   [ 0.8809] 
    [0.4419]   [NaN]   [ 0.8809]   [ 0.9156] 
    [0.4607]    [0.4547]   [ 0.9156]   [ 0.9039] 
    }
and
A1=A(:,1)
And I want to calculate
sum(A.*B(:,1:2),2)/A1
sum(A.*B(:,3:4),2)/A1
in one step because my B contains 120 columns and I want to multiply A with every 2 columns of B that is B(:,1:2) B(:,3:4) B(:,5:6)
S0, I am looking something like
sum(A.*[B(:,1:2) B(:,3:4) B(:,5:6) ],2)/A1
thanks
2 comentarios
  Oleg Komarov
      
      
 el 29 de Jul. de 2012
				As a general approach I would suggest to avoid storing double matrices in cell arrays, makes things unnecessarily complicated.
Respuesta aceptada
  Azzi Abdelmalek
      
      
 el 29 de Jul. de 2012
        
      Editada: Azzi Abdelmalek
      
      
 el 29 de Jul. de 2012
  
       a=B(2:end,:)
ind=cellfun(@(x) ~isstr(x),a);b=a;
b(find(ind==0))=num2cell(0)
C=cell2mat(b);
n=size(b,2);D=[];
   for k=1:2:n-1
   D=[D  A.*C(:,k:k+1)]
   end
   Result=sum(D,2)./A(:,1)
4 comentarios
Más respuestas (1)
  Oleg Komarov
      
      
 el 29 de Jul. de 2012
        Using the same approach from my answer to your previous post:
% First extract only the data
Bdata = cell2mat(B(2:end,:));
bsxfun(@rdivide,squeeze(nansum(bsxfun(@times, reshape(Bdata,5,2,[]),A),2)),A(:,1))
2 comentarios
  Oleg Komarov
      
      
 el 30 de Jul. de 2012
				As should have at least one dimension the same length as the reshaped out2.
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!


