Извлечь индекс минимизатора для каждого нижнего индекса, используя `accumarray 'с gpuArray - PullRequest
0 голосов
/ 03 марта 2019

У меня есть массив, если значения vals', and a corresponding array of subscripts subs 'с повторными подписками в выходной массив.Я хотел бы извлечь для каждого нижнего индекса индекс минимизатора соответствующих элементов в 'vals'.Для этого у меня есть следующий фрагмент кода:

function i = minimizer(idx)
    [~, i] = min(vals(idx));
    i = idx(i);
end
accum = accumarray(subs, (1:numel(vals))', [], @minimizer);

Теперь предположим, что «subs» - это gpuArray.Этот код не работает из-за ограничения accumarray для gpuArrays - я не могу указать пользовательскую функцию агрегирования.Есть ли какая-нибудь быстрая альтернатива, которую я могу использовать для массивов gpu?

PS - я подумал о том, чтобы встроить всю информацию в сложный массив, чтобы действительные (значения) были значениями, а imag (значения) былииндексы.Но, похоже, неясно, как обеспечить, чтобы функция `min 'сравнивала только значения, например, на какой коэффициент мне нужно умножить индексы, чтобы они стали незначительными при сравнении (я могу убедиться, что значениянеотрицательно, поэтому сравнение абсолютных значений в порядке).

...