【问题标题】:MATLAB: Finding statistics of sorted data using vectorizationMATLAB:使用矢量化查找排序数据的统计信息
【发布时间】: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


    【解决方案1】:

    您可以使用accumarray 来执行此操作。试试这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2016-05-28
      • 2012-12-03
      相关资源
      最近更新 更多