multiplying/dividing matrices that contain string variables and NaN

Asked by Sabbas on 29 Jul 2012
Latest activity Commented on by Oleg Komarov on 30 Jul 2012

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 Comments

Sabbas on 29 Jul 2012

Any help?

thanks

Oleg Komarov on 29 Jul 2012

As a general approach I would suggest to avoid storing double matrices in cell arrays, makes things unnecessarily complicated.

Sabbas

Products

No products are associated with this question.

2 Answers

Answer by Azzi Abdelmalek on 29 Jul 2012
Edited by Azzi Abdelmalek on 29 Jul 2012
Accepted answer
 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 Comments

Sabbas on 29 Jul 2012

is it ok now? thanks

Sabbas on 29 Jul 2012

could someone help me please? I do not know how to do it

thank you very much

Azzi Abdelmalek on 29 Jul 2012

did you try my code?

Azzi Abdelmalek
Answer by Oleg Komarov on 29 Jul 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 Comments

Sabbas on 29 Jul 2012

When I apply the above code I get the following error message

 bsxfun(@times, reshape(out2,ll,2,[]),AS)
Error using bsxfun
Non-singleton dimensions of the two input arrays must match each other.

Am I doing something wrong?

thanks

Oleg Komarov on 30 Jul 2012

As should have at least one dimension the same length as the reshaped out2.

Oleg Komarov

Contact us