Combine different matrices to create a new one
1 次查看(过去 30 天)
显示 更早的评论
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)
Matrix A and matrix C have the same size.
s1, s2, s3 are row’s number in matrix B. The row’s number in matrix B start from 0.
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]
Any help would be appreciated.
Thank you very
采纳的回答
Andrei Bobrov
2016-6-1
编辑:Andrei Bobrov
2016-6-1
A= [4 1 6]
B= [4 1
6 8
1 6
1 4
6 1
6 4
4 6]
K = permute(hankel(A(1:2),[A(2:end),A(1)]),[3,1,2]);
P = repmat(B,1,1,numel(A));
[L1,~] = find(all(bsxfun(@eq,K,P),2));
[L2,~] = find(all(bsxfun(@eq,K(:,end:-1:1,:),P),2));
C = max([L1,L2].') - 1
12 个评论
Andrei Bobrov
2016-6-2
m = size(A,2);
Y1 = reshape(permute(cat(3,A,circshift(A,[0 -1])),[3,2,1]),size(A,1),[]); %
Y2 = flip(Y1,1);
Bp = permute(B,[2,3,1]);
X = reshape(any([all(bsxfun(@eq,Y1,Bp));all(bsxfun(@eq,Y2,Bp))]),m*2,[])';
Z = reshape(max(bsxfun(@times,X,(1:size(B,1))')),m,[])'-1;
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!