How to get row and column from a vector size

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

use reshape(A,n,m) where the number of elements in A must = nxm
What do you mean by "2 largest row and column"? Please give examples of reshaped results.
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

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

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

Asked:

on 18 Jun 2021

Commented:

on 19 Jun 2021

Community Treasure Hunt

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

Start Hunting!