Suggestion for modifying code for combining matrices
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ali
el 14 de Jun. de 2016
Comentada: Ali
el 18 de Jun. de 2016
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,[])';
2 comentarios
Respuesta aceptada
Andrei Bobrov
el 14 de Jun. de 2016
Editada: Andrei Bobrov
el 17 de Jun. de 2016
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
6 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!