Clear Filters
Clear Filters

matrix extract without using for loop

1 view (last 30 days)
I have matrix like below
A=[ 1 2 3 4 5 6 7;
8 9 10 11 12 13 14;
15 16 17 18 19 20 21];
start=[1 3 4]; rowSize=2;
if I use for loop,
B=zeros(3,3);
for i=1:3
B(i,:)=A(i,start(i):start(i)+rowSize);
end
This will give
B =
1 2 3
10 11 12
18 19 20
Is ther anyway I can do the same process without using the for loop?
  1 Comment
Oleg Komarov
Oleg Komarov on 2 Apr 2012
Why would you want to avoid the loop? In this case I doubt vectorization would add to the performance.

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 2 Apr 2012
start=[1 3 4];
rowSize=2;
out = cell2mat(arrayfun(@(i1)A(i1,start(i1)+(0:rowSize)),(1:size(A,1))','un',0));
OR
start=[1 3 4];
rowSize=2;
n = size(A,1);
out = A(bsxfun(@plus,(bsxfun(@plus,start',0:rowSize)-1)*n,(1:n)'));

More Answers (1)

Thomas
Thomas on 2 Apr 2012
try:
A=[ 1 2 3 4 5 6 7; 8 9 10 11 12 13 14; 15 16 17 18 19 20 21];
start=[1 3 4];
rowSize=2;
B=[A(start(1),start(1):start(1)+rowSize);A(2,start(2):start(2)+rowSize);A(3,start(3):start(3)+rowSize)]

Community Treasure Hunt

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

Start Hunting!