Create a row vector comparing strings in a for loop

I have two string arrays with different sizes and assume that the second one (s2) has a variable size.
I need to create a vector (index) that contains only the indices where 'strcmpi' returns the logical value 1. It works if 's2' contains only strings present in 's1', otherwiswe the following error occurs. I think that's because I am assigning to 'index' the size of 'k' but there will be only 3 logical value = 1, but I don't know how to fix it.
Any help would be appreciated. Thanks.
s1 = { 'FMO1','FMO2','FMO3','FMO4', 'BAO1', 'BAO2', 'BAO3', 'BAO4'};
s2 = {'mean','FMO1','BAO4','FMO2'};
for k = 1 : length(s2)
compare = strcmpi(s2{k},s1);
index(k) = find(compare==1)
end
Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.

1 件のコメント

Lorenzo Amedeo
Lorenzo Amedeo 2023 年 1 月 18 日
Also thanks to you, do I have to accept your answer too? even if I already accepted the previous one

サインインしてコメントする。

 採用された回答

Davide Masiello
Davide Masiello 2023 年 1 月 18 日

0 投票

index = [];
s1 = { 'FMO1','FMO2','FMO3','FMO4', 'BAO1', 'BAO2', 'BAO3', 'BAO4'};
s2 = {'mean','FMO1','BAO4','FMO2'};
for k = 1 : length(s2)
compare = strcmpi(s2{k},s1);
index = [index,find(compare==1)];
end
index
index = 1×3
1 8 2
This way, even if any of the entry in s2 appears several times in s1 you should be ok.

2 件のコメント

Lorenzo Amedeo
Lorenzo Amedeo 2023 年 1 月 18 日
Problem solved, thanks.
Stephen23
Stephen23 2023 年 1 月 18 日
Expanding the output array will be inefficient.

サインインしてコメントする。

その他の回答 (1 件)

Stephen23
Stephen23 2023 年 1 月 18 日

1 投票

The simple MATLAB approach:
s1 = { 'FMO1','FMO2','FMO3','FMO4', 'BAO1', 'BAO2', 'BAO3', 'BAO4'};
s2 = {'mean','FMO1','BAO4','FMO2'};
X = contains(s1,s2)
X = 1×8 logical array
1 1 0 0 0 0 0 1
Y = find(X) % optional
Y = 1×3
1 2 8

1 件のコメント

Lorenzo Amedeo
Lorenzo Amedeo 2023 年 1 月 19 日
Thank you, I would accept your answer but I don't think I can accept more than one.

サインインしてコメントする。

カテゴリ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by