Info

Questa domanda è chiusa. Riaprila per modificarla o per rispondere.

could anyone help me how to update the array values with respect to the following arrays

1 visualizzazione (ultimi 30 giorni)
A= [1.0119 1.6739;
2.8012 1.6381;
0.0752 0.1222;
1.3143 0.8189;
0.7956 0.8750;
1.8512 1.1499]
B =[0.9512 0.4314;
0.2490 0.8309;
0.3864 0.8246]
C= [ 3;
1;
2;
1;
2;
1]
I am having the above three matrices,I want to update B by considering the average values of A with respect to C.
For example,
In C i have 2nd,4th and 6th rows to be 1 which means i need to add the mentioned rows in A and find the average of it and it needs to be updated in first row of B.
in the same way,i need to add 3rd and 5th rows in A and it needs to get updated in second rows of B.
On doing this the updated B should be [1.9889 1.2023;
0.4354 0.4986;
0.3864 0.8246]
could anyone please help me on this.

Risposte (2)

Alaster Meehan
Alaster Meehan il 14 Ott 2019
B(1,:) = mean(A(C == 1,:));
B(2,:) = mean(A(C == 2,:));
B(3,:) = mean(A(C == 3,:));
Or you can put it in a for loop.
for ii = 1:3
B(ii,:) = mean(A(C == ii,:));
end
Cheers Alaster
  3 Commenti
Alaster Meehan
Alaster Meehan il 14 Ott 2019
Sorry should have specified dimension for mean().
Also add in the max value for C, to generalise the loop.
If thre is an index not present in C then this will result in a row of NaNs.
for ii = 1:max(C)
B(ii,:) = mean(A(C == ii,:),1)
end

Andrei Bobrov
Andrei Bobrov il 14 Ott 2019
Modificato: Andrei Bobrov il 15 Ott 2019
a = (1:max(C))';
b = accumarray(C,1);
i = a(accumarray(C,1) > 1);
[lo,ii] = ismember(C,i);
AA = A(lo,:);
[iii,j] = ndgrid(ii(lo),1:size(B,2));
B(i,:) = accumarray([iii(:),j(:)],AA(:),[],@mean);
  4 Commenti
jaah navi
jaah navi il 15 Ott 2019
I tried your code with respect to the following matrices
A=[1.0119 1.6739
2.8012 1.6381
0.0752 0.1222
1.3143 0.8189
0.7956 0.8750
1.8512 1.1499];
B=[0.3788 0.6150;
0.7567 0.4021;
0.5070 0.1980]
C =[1;
2;
3;
2;
2;
2]
a = unique(C)
b=accumarray(C,1)
i = a(accumarray(C,1) > 1)
lo = ismember(C,i)
AA = A(lo,:)
[ii,j] = ndgrid(C(lo),1:size(B,2))
B(i,:) = accumarray([ii(:),j(:)],AA(:),[],@mean)
When i run the code i am getting error stating Subscripted assignment dimension mismatch.
Error in line
B(i,:) = accumarray([ii(:),j(:)],AA(:),[],@mean)
Could you please help me on this.

Questa domanda è chiusa.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by