replace long string of variables
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Cristian Martin
le 1 Juin 2022
Commenté : Cristian Martin
le 1 Juin 2022
Hi,
I have a script like below. The problem is that I must to create until index50, how can I write the script more easier and faster?
index1= strcmp(a(:,1), 'mama') & strcmp(a(:,3), '1');
val1 = unique(index1);
val_unica1 = nnz(val1);
index2= strcmp(a(:,1), 'mama') & strcmp(a(:,3), '2');
val2 = unique(index2);
val_unica2 = nnz(val2);
index3= strcmp(a(:,1), 'mama') & strcmp(a(:,3), '3');
val3 = unique(index3);
val_unica3 = nnz(val3);
total= sum(val_unica1) + sum(val_unica2) + sum(val_unica3);
2 commentaires
Stephen23
le 1 Juin 2022
Modifié(e) : Stephen23
le 1 Juin 2022
Very interesting code. Because STRCMP returns a boolean array:
index1= strcmp(a(:,1), 'mama') & strcmp(a(:,3), '1');
this line:
val1 = unique(index1);
will return one of [], FALSE, TRUE, or [FALSE,TRUE]. You then count how many times TRUE occurs:
val_unica1 = nnz(val1);
which will return either 0 or 1. It would be simpler and more efficient to use ANY.
Réponse acceptée
Steven Lord
le 1 Juin 2022
a = {'mama', '5', '1';
'mama', '4', '1';
'mama', '6', '1';
'mama', '7', '2';
'mama', '7', '2';
'mama', '7', '1';
'mama', '7', '3';
'mama', '7', '3';
'mama', '8', '1'};
rowsWithMama = strcmp(a(:, 1), 'mama')
rowsWith1 = strcmp(a(:, 3), '1')
nnz(rowsWithMama & rowsWith1)
If you have multiple values you want to test for in column 3 consider using ismember.
rowsWith2Or3 = ismember(a(:, 3), {'2', '3'})
or, using string to make creation of the list of search terms easier by avoiding needing to manually create '2', '3', '4', ... '50':
s = string(2:3)
rowsWith2Or3 = ismember(a(:, 3), s)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Project Setup 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!