Прежде всего, обратите внимание, что размер indices
не имеет значения (например, если indices
и dotPs
были одномерными или трехмерными массивами, результат будет одинаковым).
pop
можно вычислить с помощью функции histcount
, но, поскольку вам также необходимо вычислить сумму соответствующих элементов массива dotPs
, проблема становится более сложной.
Вот возможное решение с помощью for
петля. Преимущество этого решения состоит в том, что я не вызываю find
функцию в цикле, поэтому она должна быть быстрее:
%Example input
indices=randi(5,3,3);
dotPs=rand(3,3);
%Solution
[C,ia,ic]=unique(indices);
nn=zeros(size(C));
pop=zeros(size(C));
for i=1:numel(indices)
nn(ic(i))=nn(ic(i))+1;
pop(ic(i))=pop(ic(i))+dotPs(i);
end
Это решение использует вектор ic
для классификации каждого из входных значений. После этого я прохожу каждый элемент и обновляю nn(ic)
и pop(ic)
.