Storage elements from matrix in other one, with indexing.

1 view (last 30 days)
I want to storage information from one matrix to another. In this example, from A matrix I have to extract to storage in B matrix. The solution should be:
B = [6 4
6 8]
I tried so hard, I don't get it.
Please help me.
A = [
8 3 0 2
9 6 1 4
10 6 2 1
1 6 2 8
];
a=2;
b=4;
B = zeros(2)
m=1
while m<=2
k= 1
while k<=2
i=1
while i<=4
if i==a
n1 = i
if n1<=2
j = 1
while j<=4
if j==b
n2=j
if n2<=2
B(m,k) = B(m,k)+A(n1,n2)
%B(m,k) = B(m,k)+A(n1,n2)
end
end
j = j+1
end
end
end
i = i+1
end
k = k+1
end
m=m+1
end

Accepted Answer

KSSV
KSSV on 10 May 2021
A = [8 3 0 2
9 6 1 4
10 6 2 1
1 6 2 8
];
a=2;
b=4;
[X,Y] = meshgrid([a b],[a b]) ;
id = sub2ind(size(A),Y,X) ;
B = A(id) ;
B
B = 2×2
6 4 6 8
  3 Comments
KSSV
KSSV on 10 May 2021
A = [8 3 0 2
9 6 1 4
10 6 2 1
1 6 2 8
];
a=2;
b=4;
[X,Y] = meshgrid([a b],[a b]) ;
[m,n] = size(X) ;
B = zeros(m,n) ;
for i = 1:m
for j = 1:n
B(i,j) = A(Y(i,j),X(i,j)) ;
end
end
Loop will be slower....the solution shown first will be fast.

Sign in to comment.

More Answers (1)

Stephen23
Stephen23 on 10 May 2021
The MATLAB approach:
A = [8,3,0,2;9,6,1,4;10,6,2,1;1,6,2,8]
A = 4×4
8 3 0 2 9 6 1 4 10 6 2 1 1 6 2 8
v = [2,4];
out = A(v,v)
out = 2×2
6 4 6 8

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!