How can I do linear indexing in matlab?

3 Ansichten (letzte 30 Tage)
TAUSIF
TAUSIF am 1 Mär. 2014
Kommentiert: TAUSIF am 2 Mär. 2014
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

Akzeptierte Antwort

Image Analyst
Image Analyst am 1 Mär. 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 Kommentare
Image Analyst
Image Analyst am 1 Mär. 2014
Bearbeitet: Image Analyst am 1 Mär. 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 am 2 Mär. 2014
The answer given by Image Analyst really works

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (4)

Abdulrazzaq
Abdulrazzaq am 1 Mär. 2014
Bearbeitet: Abdulrazzaq am 1 Mär. 2014
try:
B = A(:)';
Best wishes
Abdulrazzaq

dpb
dpb am 1 Mär. 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 am 1 Mär. 2014
Bearbeitet: Matt J am 1 Mär. 2014
Using MAT2TILES (available here),
B=cellfun(@(c) c(:).', mat2tiles(A.',[2,2]),'uni',0);
B=[B{:}]

Roger Stafford
Roger Stafford am 1 Mär. 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.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by