2016-05-13 2 views
1

This is data matrix having 2*159 cells Dans la matrice de données, il y a tant de colonnes (2 vecteurs) de longueur différente. Je veux tamponner les zéros qui ont la longueur minimum. Nombre de zéros doit êtreComment faire une matrice de cellules de la même longueur après avoir rempli des zéros

[max(length(Vector 1))-min(length(Vector 2))] 

Maintenant, je veux ajouter des zéros dans la cellule qui ont une longueur minimale. et veulent faire une longueur égale dans chaque colonne si la colonne a la même longueur que pas de problème.

Répondre

1
n = max(max(cellfun(@(x)size(x,2),data))) 
cellfun(@(x)[x, zeros(1,n-numel(x))], data, 'uni', 0) 

ci-dessus a été de trouver une seule valeur de max de tampon des cellules à. Je me rends compte maintenant que vous voulez réellement ce maximum calculé sur une base par colonne:

n = max(cellfun(@(x)size(x,2),data)) 
cellfun(@(x,n)[x, zeros(1,n-numel(x))], data, repmat(num2cell(n),2,1), 'uni', 0) 

A ce stade, il pourrait être plus intuitif à utiliser simplement une boucle

for col = 1:size(data,2) 
    n = max(size(data{1,col},2),size(data{2,col},2)); 
    for row = 1:2 
     x = data{row,col}; 
     data{row,col} = [x, zeros(1,n-numel(x))]; 
    end 
end 
+1

'cellfun (@ (x) [ x, zeros (1, n-numel (x))], data, 'UniformOutput', false) ' –

+0

Qu'est-ce que x en ce que –

+1

' x' est chacune des cellules de la variable d'entrée 'data'. Considérez 'cellfun' comme une boucle. La première itération est 'data {1} = [data {1}, zéros (1, n-numel (data {1}))]'. Notez que vous devez inclure le ', 'UniformOutput', false' comme je l'ai écrit dans mon commentaire. Ça ne marchera pas sans ça. –