MATLAB: Suggestion for modifying code for combining matrices

suggestion for modifying code for combining matrices

I want to create matrix C, from matrix A and B.
A = (r1 r2 r3)
B=
[r1 r2
r3 r4
r2 r1
r5 r6
r2 r3
r3 r2
r3 r1
r1 r3]
C=(s1 s2 s3)
s1, s2, s3 are row’s number in matrix B.
s1= bigger row’s number between r1 r2 and r2 r1
s2= bigger row’s number between r2 r3 and r3 r2
s3= bigger row’s number between r3 r1 and r1 r3
this is an example:
A= [4 1 6]
B= [4 1
6 8
1 6
1 4
6 1
6 4
4 6]
C= [3 4 6]
I use the following code, but it gives me an error.
could you please help me with the code.
[m,n] = size(A);
Y1 = reshape(permute(cat(3,A,circshift(A,[0 -1])),[3,2,1]),2,[]);
Y2 = flip(Y1,1);
Bp = permute(B,[2,3,1]);
X = reshape(any([all(bsxfun(@eq,Y1,Bp));all(bsxfun(@eq,Y2,Bp))]),m*n,[])';
C = reshape(max(bsxfun(@times,X,(1:size(B,1))')),[],m)'-1;
error:
Error using bsxfun
Requested 2x80310x80310 (12.0GB) array exceeds maximum array size preference. Creation of
arrays greater than this limit may take a long time and cause MATLAB to become
unresponsive. See array size limit or preference panel for more information.
Error in untitle (line 81)
X = reshape(any([all(bsxfun(@eq,Y1,Bp));all(bsxfun(@eq,Y2,Bp))]),m*n,[])';

Best Answer

Hi Ali! Please try it code:
[m,n] = size(A);
out = size([m,n]);
aa = permute(cat(3,A,circshift(A,[0 -1])),[2 3 1]);
for ii = 1:m
for jj = 1:n
a = aa(jj,:,ii);
out(ii,jj) = max([find(ismember(B,a(end:-1:1),'rows'),1,'last'),...
find(ismember(B,a,'rows'),1,'first')])-1;
end
end