## If I have a 3d matrix(A), how can i check if a given 2d matrix(B) is one of matrix A's pages?

on 12 Feb 2013

### Jan Simon (view profile)

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.

## Products

### Jan Simon (view profile)

on 12 Feb 2013

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.

may

on 12 Feb 2013

thank you a lot

### Teja Muppirala (view profile)

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
```

### Jan Simon (view profile)

on 12 Feb 2013
Edited by Jan Simon

### Jan Simon (view profile)

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.