Pad empty spaces in matrix with 0
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Meg Cullen
le 12 Mai 2019
Commenté : madhan ravi
le 12 Mai 2019
I have a matrix of the form:
1 4 6 3 7 3
4 6 2 9
5 5 8 2 5
4 8 1 3 9 4
As I accumulated the rows of the matrix from different sources there is a inconsistency in the length of rows. How do I pad the empty spaces with 0? Please help.
3 commentaires
Image Analyst
le 12 Mai 2019
What are the "empty spaces" - do you want to just pad the right hand side?
Réponse acceptée
Image Analyst
le 12 Mai 2019
Try this:
c1m_wrf = [1 4 6 3 7 3 ]
c2m_wrf = [4 6 2 9]
c3m_wrf = [5 5 8 2 5]
c4m_wrf = [4 8 1 3 9 4 ]
maxLength = max([length(c1m_wrf), length(c2m_wrf), length(c3m_wrf), length(c4m_wrf)])
ca = {c1m_wrf, c2m_wrf, c3m_wrf, c4m_wrf}
m = zeros(4, maxLength);
for row = 1 : length(ca)
thisVector = ca{row};
thisLength = length(thisVector);
m(row, 1:thisLength) = thisVector;
end
You get
m =
1 4 6 3 7 3
4 6 2 9 0 0
5 5 8 2 5 0
4 8 1 3 9 4
0 commentaires
Plus de réponses (1)
madhan ravi
le 12 Mai 2019
C={[1 4 6 3 7 3] ;...
[4 6 2 9] ;...
[5 5 8 2 5] ;...
[4 8 1 3 9 4] };
M=max(cellfun('prodofsize',C));
Wanted = cell2mat(cellfun(@(x) [x zeros(1,M-numel(x))],C,'un',0))
2 commentaires
Rik
le 12 Mai 2019
%doesn't work:
Wanted = cell2mat(pad(C,'right',0));
%does work:
Wanted = double(cell2mat(pad(cellfun(@char,C,'un',0),'right',char(0))));
I have the feeling Matlab is getting a bit less weakly typed than it used to be.
Voir également
Catégories
En savoir plus sur Migrate GUIDE Apps dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!