我有一些功能代码,我试图通过消除for循环来加快速度 .
我有一组x,y对中的数据作为两个向量,因此x(k)和y(k)形成一对 . 我也有一组bin边(xe) . 对于每个bin j,在该bin中存在一组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
当xe很大时,此功能变慢 . 有没有人有任何关于如何矢量化此代码以消除for循环的建议?给定箱(numx)中的数据点数是可变的 .
一个警告:长度(xe)*长度(xdata)在这些情况下非常大(长度(xdata)总是远大于长度(xe)),因此不可能使用repmat创建长度(xe)x长度(xdata)矩阵 .
1 回答
您可以使用
accumarray
来执行此操作 . 尝试类似的东西: