Expand 1-D array to 2-D matrix using 'ones' function and colon ':'

6 views (last 30 days)
Example:
matrixA = 6:10;
matrixA = matrixA(ones(1,5), :);
or:
matrixB = (6:10)';
matrixB = matrixB(:, ones(1,5));
My Question:
What's going on here? I just don't get it. Is there any reference on this "exotic" usage? Many thanks for any inputs!

Accepted Answer

Daniel Shub
Daniel Shub on 5 Sep 2011
It is not that crazy. It is basically
matrixA = 6:10;
for ii = 1:5
for jj = 1:5
temp(ii, jj) = matrixA(1, jj);
end
end
matrixA = temp;
but lump together into a vectorized version. You can get rid of the inner loop with:
matrixA = 6:10;
for ii = 1:5
temp(ii, :) = matrixA(1, :);
end
matrixA = temp;
and you can finally get rid of all loops with
matrixA = 6:10;
temp = matrixA(ones(1,5), :);
matrixA = temp;

More Answers (2)

Oleg Komarov
Oleg Komarov on 5 Sep 2011
matrixA = matrixA(ones(1,5), :)
select all elements from row one 5 times.
matrixB = matrixB(:, ones(1,5));
select all elements from column one 5 times.

Edwin
Edwin on 6 Sep 2011
Thanks to Daniel and Oleg! I was mostly confused with the role of ones(1,5) here, but came to realize how it works when I read the example below from Matlab's help documents:
B = magic(4)
% Swap the two middle columns:
A = B(:,[1 3 2 4])

Community Treasure Hunt

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

Start Hunting!