replace long string of variables
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
Stephen23
2022-6-1
编辑:Stephen23
2022-6-1
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.
采纳的回答
Steven Lord
2022-6-1
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)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Project Setup 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!