How to get row and column from a vector size

29 views (last 30 days)
Hi matlab Community
i am back again with anouther question
i have a vector with variable length like this :
Vector = [10 20 30 40 50 60 70 80 9 100]
> numel(Vector) =
10
or
Vector = [ 1 2 3 4 5 ]
> numel(Vector) =
5
i want to reshape the vector to a matrix with the 2 largest row and coluumn.
but i can't find out how to go from vector size to matrix row and column
thanks in advance
  3 Comments
James Tursa
James Tursa on 18 Jun 2021
What do you mean by "2 largest row and column"? Please give examples of reshaped results.
the cyclist
the cyclist on 18 Jun 2021
Also, because 5 is a prime number, your example
Vector = [ 1 2 3 4 5 ];
cannot be shaped into a matrix (other than 1x5 or 5x1), so you might want to clarify that case as well.

Sign in to comment.

Accepted Answer

Scott MacKenzie
Scott MacKenzie on 18 Jun 2021
Edited: Scott MacKenzie on 18 Jun 2021
Assuming the vector length being a prime number (as noted by @the cyclist) is just one possible case of many, then the following code achieves the desired goal:
% test vector
v = rand(1,randi([1 100]));
n = length(v);
n1 = round(sqrt(n));
while n1 > 1
if ~rem(n,n1)
break;
end
n1 = n1 - 1;
end
n2 = n/n1;
fprintf('For %d elements, max matrix is %d x %d\n', n, n1, n2);
M = reshape(v, n1, n2); % reshaped vector
Output for some example runs:
For 18 elements, max matrix is 3 x 6
For 36 elements, max matrix is 6 x 6
For 44 elements, max matrix is 4 x 11
For 59 elements, max matrix is 1 x 59
  1 Comment
Houssam
Houssam on 19 Jun 2021
thanks very mush, this exactly what i was looking for,
but there is always that problem of primary numbers!
so i've decided to to choose 512 as a number of columns
and add zeros at the end of the file so that it can be devided by that number of rows

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!