MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by may on 12 Feb 2013

I have a 3d matrix A, let say A is a 2x2x3 matrix as follows [1 2 ;3 4] [5 6;3 4] [5 6;1 2]

now I want to know if a 2x2 matrix like [5 6;3 4] is one of A's pages. so since [5 6;3 4] is the second page of A, I should get 1 as the answer.

Answer by Jan Simon on 12 Feb 2013

Accepted answer

Another approach:

A = cat(3, [1 2; 3 4], [5 6; 3 4], [5 6; 1 2]) B = [5 6; 3 4]

S = reshape(A, 1, []); T = reshape(B, 1, []); match = strfind(S, T); Result = any(mod(match, 4) == 1);

This can be made a one-liner easily.

Answer by Teja Muppirala on 12 Feb 2013

Given a 3d matrix A:

A = cat(3, [1 2; 3 4], [5 6; 3 4], [5 6; 1 2])

And some 2d matrix B

B = [5 6; 3 4]

Then, the following expression is one way to see if B is a page in A:

any(all(all(bsxfun(@eq,A,B)))) % Returns true

Moreover, if you would like to know which page of A in which B was found, you could do this:

find(all(all(bsxfun(@eq,A,B)))) % Returns 2

Answer by Jan Simon on 12 Feb 2013

Edited by Jan Simon on 12 Feb 2013

What about a simple FOR loop?

A = cat(3, [1 2; 3 4], [5 6; 3 4], [5 6; 1 2]) B = [5 6; 3 4]

Result = false; for iA = 1:size(A, 3) if isequal(A(:, :, iA), B) Result = true; break; end end

Here it is exploited, that a single trailing index is omitted automatically:

size(A(:, :, 1))

does **not** reply [2, 2, 1], but [2, 2]. Otherwise ISEQUAL would fail here.

## 0 Comments