У меня есть некоторый функциональный код, который я пытаюсь ускорить, исключив цикл for.
У меня есть набор данных в парах x, y в виде двух векторов, поэтому x (k) и y (k) образуют пару. У меня также есть набор ребер (хе). Для каждого элемента j имеется набор значений x в этом элементе, определяемый как xe (j) <= x (k) <xe (j + 1). Для каждого бина я хотел бы найти среднее и стандартное отклонение всех y (k) с x (k) в этом бине. </p>
Код 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
Когда значение xe большое, эта функция замедляется. Кто-нибудь есть какие-либо предложения о том, как векторизовать этот код для устранения цикла for? Количество точек данных в данном бине (numx) является переменным.
Одно предупреждение: длина (xe) * длина (xdata) в этих случаях очень велика (длина (xdata) всегда намного больше, чем длина (xe)), поэтому невозможно использовать repmat для создания длины ( xe) матрица x length (xdata).