How to find pattern in an array?

92 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2017 年 12 月 5 日
コメント済み: gwoo 2022 年 5 月 25 日
How to find a pattern from a numeric array?
For example, there is a numeric array B and pattern (or mask) A. How to get the pattern location found in B? 
 
>> A = [1 2 3];
>> B = [5,4,3,1,2,3,5,4,1,2,3,4,5];
 
Expected output: 4, 9
 

採用された回答

MathWorks Support Team
MathWorks Support Team 2017 年 12 月 5 日
There is no built-in MATLAB function that performs the exact operation described.
However, you can use a single for-loop and the built-in "all" and "find" functions to create a custom function that will output the desired behavior:
>> function output = pattern(B, A)
>> SIZE = length(B) - length(A);
>> match = zeros(1, SIZE);
>> for i=1:SIZE
>> match(i) = all(B(i:i-1+length(A)) == A);
>> end
>> output = find(match == 1);
>> end
  1 件のコメント
gwoo
gwoo 2022 年 5 月 25 日
As @claudio points out below in More Answers, strfind(B, A) does exactly what is requested.

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

その他の回答 (1 件)

claudio
claudio 2020 年 5 月 14 日
output = strfind(B,A);
  1 件のコメント
claudio
claudio 2021 年 1 月 14 日
No exceptions. if you have a particular request you can submit it to evaluate the specific case
str = sprintf('Special string for \t Karel \t K');
pattern = sprintf('\t');
idxTab = strfind(str,pattern)
idxTab =
20 28

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

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

製品


リリース

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by