Searching and summing array
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Fischer Zheng
le 30 Oct 2015
Réponse apportée : Fischer Zheng
le 2 Nov 2015
Hi All, I have three arrays. One small one called A and two huge ones called M1 and M2. M1 and M2 are of the same size.
A = ['K1','K2','K3'....];
M1 = ['K9','K45','K2'..];
M2 = [123,34.2,1654,...];
I am trying to sum all the values in M2 base on M1 into the buckets in A. As the current example, 'K2' bucket would have 1654 plus anything else that is 'K2' in M1.
Thanks in advance, Fischer
1 commentaire
Jan
le 30 Oct 2015
Note, that ['K1','K2','K3'] is the string 'K1K2K3'. Is this really the representation in your code? Or is A a cell string?
Réponse acceptée
Plus de réponses (1)
Geoff Hayes
le 30 Oct 2015
Fischer - think about how you would do this by hand. You would start with the first element of A, 'K1', and then look at each element of M1. Every match you find you would then add to the sum corresponding to 'K1'. Try doing something like the following where we assume that A and M1 are cell arrays and we use find to determine the indices of those elements of M1 that match the element of A that we are interested in.
% create an array that will manage the sums for each element of A
sumsOfA = zeros(size(A));
% iterate over each element of A
for k=1:length(A)
% get the indices of M1 that match A{k}
idcs = find(strcmp(A{k},M1))
% sum the elements of M1
sumsOfA(k) = sum(M2(idcs));
end
2 commentaires
Geoff Hayes
le 31 Oct 2015
For sure! The result of
strcmp(A{k},M1)
will return an array of zeros and ones which can the be used to access the elements of M2.
Thanks, Jan!
Voir également
Catégories
En savoir plus sur Characters and Strings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!