2016-05-16 1 views
0

J'ai un objet cellule de taille nx1 qui contient une matrice de taille mxnxk à chaque coordonnée.MATLAB: Opération min par élément sur l'objet cellule

En sortie, je voudrais obtenir une matrice de taille mxnxk qui est le résultat d'une opération min par pixel pour toutes les matrices de la cellule.

J'utilise actuellement une boucle for, mais je préfère utiliser quelque chose de plus élégant.

exemple de code:

%example for an input (in my case m,n and k are much bigger) 
m = 4; n=3; k=2; 
relevanceCell = {rand(m,n,k),rand(m,n,k),rand(m,n,k)} 

%prints input 
relevanceCell{:} 

%for loop for calculating the per-pixel minimal value. 
minRes = relevanceCell{1}; 
for ii=2:length(relevanceCell) 
    minRes = min(minRes,relevanceCell{ii}); 
end 

%prints output 
minRes 

Répondre

3

les concaténer dans la 4ème dimension, puis appliquez min fonction sur cette dimension:

minRes = min(cat(4,relevanceCell{:}),[],4); 

Pour être plus générique, vous pouvez trouver le nombre de dimensions de la tableaux et d'adapter à cela:

nextDim = 1 + ndims(relevanceCell{1}); 
minRes = min(cat(nextDim,relevanceCell{:}),[],nextDim); 
+0

Merci pour votre réponse! C'est une bonne idée, qui fonctionne bien pour un cas où k = 1. Cela ne fonctionnera pas si k> 1. J'ai modifié ma question pour que l'exemple que j'ai donné ne soit pas déroutant. – drorco

+0

Ensuite, vos matrices sont en 3 dimensions et vous devez agir sur la 4ème dimension. Je mets à jour la réponse. –