How can I do linear indexing in matlab?

2 views (last 30 days)
hi, Suppose I have a matrix A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]; I want to transfer it into a linear matrix as A=[1 2 5 6 3 4 7 8 9 10 13 14 11 12 15 16]; (i.e. mortan scan order in image processing). Can you help me. All my work will start after this only. I would be very greatful to you

Accepted Answer

Image Analyst
Image Analyst on 1 Mar 2014
This will get you the desired matrix, whereas the other two don't (yet unless they edit them):
% Reference arrays.
A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]
desired = [1 2 5 6 3 4 7 8 9 10 13 14 11 12 15 16]
% Next two solutions don't produce desired.
B1 = A(:)'
B2 = reshape(reshape(A.',2,[]),1,[])
% This will get you the desired.
[rows, columns] = size(A)
B3 = [];
for row = 1 : 2 : rows
for col = 1 : 2 : columns
B3 = [B3, A(row, col), A(row, col+1), A(row+1, col), A(row+1, col+1)];
end
end
B3 % Report values to command window.
  3 Comments
Image Analyst
Image Analyst on 1 Mar 2014
Edited: Image Analyst on 1 Mar 2014
I just copied and pasted his array and your code and I got this:
desired =
1 2 5 6 3 4 7 8 9 10 13 14 11 12 15 16
B2 =
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
They looked different to me. My B3 gives this:
B3 =
1 2 5 6 3 4 7 8 9 10 13 14 11 12 15 16
which looks the same as what he desires his final out A to be.
TAUSIF
TAUSIF on 2 Mar 2014
The answer given by Image Analyst really works

Sign in to comment.

More Answers (4)

Abdulrazzaq
Abdulrazzaq on 1 Mar 2014
Edited: Abdulrazzaq on 1 Mar 2014
try:
B = A(:)';
Best wishes
Abdulrazzaq

dpb
dpb on 1 Mar 2014
One way amongst many --
B=reshape(reshape(A.',2,[]),1,[]);
Consider how Matlab storage is in column-major order and what operation one needs to get to the desired organization from the original...

Matt J
Matt J on 1 Mar 2014
Edited: Matt J on 1 Mar 2014
Using MAT2TILES (available here),
B=cellfun(@(c) c(:).', mat2tiles(A.',[2,2]),'uni',0);
B=[B{:}]

Roger Stafford
Roger Stafford on 1 Mar 2014
If you convert each of the integers 0:15 to binary, permute the digits appropriately, recalculate the numbers from these permuted digits, and finally add 1 to each, you will get the correct linear indexing. The same holds true for larger Z-orders.

Community Treasure Hunt

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

Start Hunting!