Info

Cette question est clôturée. Rouvrir pour modifier ou répondre.

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

1 vue (au cours des 30 derniers jours)
jaah navi
jaah navi le 14 Oct 2019
Clôturé : MATLAB Answer Bot le 20 Août 2021
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.

Réponses (2)

Alaster Meehan
Alaster Meehan le 14 Oct 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 commentaires
Alaster Meehan
Alaster Meehan le 14 Oct 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 le 14 Oct 2019
Modifié(e) : Andrei Bobrov le 15 Oct 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 commentaires
jaah navi
jaah navi le 15 Oct 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.

Community Treasure Hunt

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

Start Hunting!

Translated by