首页 文章

MATLAB:使用矢量化查找已排序数据的统计信息

提问于
浏览
2

我有一些功能代码,我试图通过消除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 回答

  • 3

    您可以使用 accumarray 来执行此操作 . 尝试类似的东西:

    meany = accumarray(bin(:),ydata(:),[],@mean);
    standarddeviation = accumarray(bin(:),ydata(:),[],@std);
    

相关问题