replace long string of variables
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Cristian Martin
el 1 de Jun. de 2022
Comentada: Cristian Martin
el 1 de Jun. de 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 comentarios
Stephen23
el 1 de Jun. de 2022
Editada: Stephen23
el 1 de Jun. de 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.
Respuesta aceptada
Steven Lord
el 1 de Jun. de 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)
Más respuestas (0)
Ver también
Categorías
Más información sobre Project Setup en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!