Info

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

1 view (last 30 days)
jaah navi on 14 Oct 2019
Closed: MATLAB Answer Bot on 20 Aug 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]

Alaster Meehan on 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 CommentsShow 1 older commentHide 1 older comment
Alaster Meehan on 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 on 14 Oct 2019

Andrei Bobrov on 14 Oct 2019
Edited: Andrei Bobrov on 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);
jaah navi on 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)