Нежелательная перезапись дубликатов в цикле PARFOR - PullRequest
0 голосов
/ 15 мая 2009

В MATLAB первый набор циклов ниже учитывает дубликаты, а второй набор циклов (с использованием PARFOR) - нет. Они перезаписывают предыдущее значение. Как мы это исправим?

Для цикла:

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

Петля PARFOR:

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

1 Ответ

4 голосов
/ 15 мая 2009

Несколько баллов ...

  1. Опечатки : Вы уверены, что должны использовать переменную pset , или вы хотели использовать dset ? Кроме того, существует неопределенная переменная p в первом наборе циклов. Должен ли код из первого набора циклов прочитать следующее?

    t(h) = dset(k);
    h = h+1;
    
  2. Вы не делаете одно и то же в каждом цикле. Вы пытались заменить строку:

    t(d) = dset(k);
    

    с двумя строками, которые я написал выше?

  3. Не могу не заметить, что каждый из этих наборов циклов можно заменить на векторное решение, используя функцию ISMEMBER . Исходя из вашего кода выше, я считаю, что это должно выполнить то же самое:

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

    или, если pset на самом деле должно быть dset :

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

    Кроме того, не рекомендуется называть одну из ваших переменных set , поскольку уже есть встроенная функция, которая называется: SET .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...