reshape a matrix with a divisible of 10....
10 views (last 30 days)
Show older comments
Elysi Cochin
on 26 Feb 2014
Commented: Elysi Cochin
on 26 Feb 2014
i wanted to reshape my a matrix of size 1*N into 10 rows N/10 columns... but when N is not divisible by 10 i get error... how can i rectify the error?? either pad it with zeros to get a number divisible by 10 or get the previous number divisible by 10....
that is if my matrix
A = 1 * 100
i need output B to be 10*10 output
but if A = 1*111....
i get error, so i want to convert
A to 1 * 120 and get B = 10*12 or
change A to 1*110 and get B = 10*11 new output....
please do reply me....
0 Comments
Accepted Answer
Andrei Bobrov
on 26 Feb 2014
Edited: Andrei Bobrov
on 26 Feb 2014
r = 10;
out = reshape([A(:);nan(mod(-numel(A),r),1)],r,[])
ADD
out = reshape(A(1:fix(numel(A)/r)*r),r,[])
2 Comments
Andrei Bobrov
on 26 Feb 2014
This is a different solutions, for example:
A =randi(25,1,27)
r = 10;
out1 = reshape([A(:);nan(mod(-numel(A),r),1)],r,[]) % first variant
out2 = reshape(A(1:fix(numel(A)/r)*r),r,[]) % second variant
More Answers (3)
Azzi Abdelmalek
on 26 Feb 2014
Edited: Azzi Abdelmalek
on 26 Feb 2014
A=rand(87,1);
n=(10-mod(numel(A),10));
n=n*sign(n);
A(end+1:end+n)=0;
out=reshape(A,10,[])
%or
r=10
m=numel(A);
out=reshape([A;zeros(ceil(m/r)*r-m,1)],r,[])
0 Comments
Iain
on 26 Feb 2014
To pad it with 0's:
if mod(numel(A),10)
A(ceil(numel(A)/10)*10) = 0;
end
B = reshape(A,10,[]);
To pad with NaNs...
if mod(numel(A),10)
A(end+1:ceil(numel(A)/10)*10) = NaN;
end
B = reshape(A,10,[]);
To use the previous divisible:
A((floor(numel(A)/10)*10+1):end) = [];
B = reshape(A,10,[]);
0 Comments
Anuj
on 26 Feb 2014
Try this, its very simple-
n=10-mod(numel(A),10);
if n==10;
reshape(A,10,numel(A)/10)
else
A=padarray(A,[0,n],'post');
reshape(A,10,numel(A)/10)
end
See Also
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!