【发布时间】:2012-02-12 13:01:14
【问题描述】:
我有一些功能性代码,我试图通过消除 for 循环来加快速度。
我有一组 x,y 对的数据作为两个向量,因此 x(k) 和 y(k) 形成一对。我还有一组 bin 边缘 (xe)。对于每个 bin j,该 bin 中有一组 x 值,由 xe(j)
完成此操作的 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 循环有任何建议?给定 bin (numx) 中的数据点数量是可变的。
一个警告:这些情况下的length(xe)*length(xdata)非常大(length(xdata)总是比length(xe)大很多),所以不可能使用repmat来创建一个length( xe) x 长度(xdata) 矩阵。
【问题讨论】:
标签: matlab vectorization