To find a vector subset of a matrix in sequence?

1 view (last 30 days)
I have a vector A = [1 2 3] And another matrix B = [2 3 4 1; 1 2 3 4; 2 4 1 3; 2 3 1 4]
I want to know which row of vector A is subset of Matrix B (in same sequence of A, i.e. 1 2 3
The answer is 2nd row of B matrix

Accepted Answer

Thibaut Jacqmin
Thibaut Jacqmin on 27 Jan 2017
Here is a solution in one line :
A = [1 2 3];
B = [2 3 4 1; 1 2 3 4; 2 4 1 3; 2 3 1 4];
% Reshape B in a 1D array (all rows in a line)
C = reshape(B', [1, numel(B)]);
% Then use strfind to find a pattern in a string pattern within a string
linear_index = strfind(C, A);
% Compute the row number of the pattern knowing the initial number of columns
row_number = ceil(linear_index/size(B, 2));
% Or do it in a single line :
row_number = ceil(strfind(reshape(B', [1, numel(B)]), A)/size(B, 2));
  2 Comments
Jan
Jan on 27 Jan 2017
A good idea.
The current version fails, if the searched vector appears over the margins:
B = [2 3 4 1; 2 3 1 4]
But you can filter all occurrences, which do not start between 1 and size(B,2)-length(A).

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!