У меня есть функциональный код, который я пытаюсь ускорить, исключив цикл for.MATLAB: Поиск статистики отсортированных данных с использованием векторизации
У меня есть набор данных в x, y пар как два вектора, поэтому x (k) и y (k) образуют пару. У меня также есть набор ребер (xe). Для каждого бина j существует набор значений x в этом бине, определяемый xe (j) < = x (k) < xe (j + 1). Для каждого бина я хотел бы найти среднее и стандартное отклонение всех y (k) с x (k) в этом бине.
MATLAB код, который выполняет это ниже:
[meany, standardeviation] = ystatsvsx (xdata, ydata, xe)
meany = zeros([size(ydata,1) (length(xe)-1)]);
standarddeviation = meany;
[numx,bin] = histc(xdata, xe);
for j = 1:(length(xe) - 1)
inds = bin == j;
meany(j) = mean(ydata(inds));
standarddeviation(j) = std(ydata(inds));
end
Когда х велико, эта функция становится медленным. Кто-нибудь имеет какие-либо предложения о том, как векторизовать этот код, чтобы исключить цикл for? Количество точек данных в данном бункере (numx) является переменной.
Одно предупреждение: длина (xe) * длина (xdata) в этих случаях очень большая (длина (xdata) всегда намного больше длины (xe)), поэтому невозможно использовать repmat для создания длины (xe) x length (xdata).
и если у нас есть три вектора, как это работает? – user1331843