multiplying/dividing matrices that contain string variables and NaN
    4 次查看(过去 30 天)
  
       显示 更早的评论
    
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 个评论
  Oleg Komarov
      
      
 2012-7-29
				As a general approach I would suggest to avoid storing double matrices in cell arrays, makes things unnecessarily complicated.
采纳的回答
  Azzi Abdelmalek
      
      
 2012-7-29
        
      编辑:Azzi Abdelmalek
      
      
 2012-7-29
  
       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 个评论
更多回答(1 个)
  Oleg Komarov
      
      
 2012-7-29
        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 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


