2009-05-15 7 views
0

Dans MATLAB, le premier jeu de boucles ci-dessous représente les doublons, mais pas le second jeu de boucles (utilisant PARFOR). Ils remplacent la valeur précédente. Comment pouvons-nous résoudre ce problème?Écrasement indésirable de doublons dans une boucle PARFOR

boucle For:

for d = 1:length(set), 
    for k = 1:length(dset), 
    if strcmp(pset(k),set(d)), 
     t(h,p) = dset(k); 
     h = h+1; 
    end 
    end 
end 

boucle parfor:

parfor d = 1:length(set), 
    for k = 1:length(dset), 
    if strcmp(pset(k),set(d)), 
     t(d) = dset(k); 
    end 
    end 
end 

Répondre

4

Quelques points ...

  1. Typos: Etes-vous certain que vous devez utiliser la variable pset, ou vouliez-vous utiliser dset? De même, il existe une variable indéfinie p dans le premier ensemble de boucles. Si le code dans la première série de boucles lire ce qui suit ?:

    t(h) = dset(k); 
    h = h+1; 
    
  2. Vous ne faites pas la même chose dans chaque ensemble de boucles. Avez-vous essayé de remplacer la ligne:

    t(d) = dset(k); 
    

    avec les deux lignes que j'ai écrites ci-dessus?

  3. Je ne peux m'empêcher de remarquer que chacun de ces ensembles de boucles peut être remplacé par une solution vectorisée, en utilisant la fonction ISMEMBER. En fonction de votre code ci-dessus, je crois que cela devrait faire la même chose:

    t = dset(ismember(pset,set)); 
    

    ou, si pset devrait effectivement être dset:

    t = dset(ismember(dset,set)); 
    

    En outre, il est pas un bon idée de nommer l'une de vos variables définir, car il existe une fonction intégrée déjà appelée: SET.