我接到了将一段 MATLAB 代码翻译成 IDL 的任务,当我遇到 MATLAB 函数 accumarry() 时遇到了障碍。此处描述的函数 用于根据另一个数组中给出的索引对一个数组中的元素求和。示例 1 可能比页面顶部的实际功能描述更好地解释了这一点。在尝试在 IDL 中重现示例 1 时,我无法避免 for 循环,但我相信这是可能的。我最好的尝试如下:
vals = [101,102,103,104,105]
subs = [0,1,3,1,3]
n = max(subs)+1
accum = make_array(n)
for i = 0, n-1 do begin
wVals = where(subs eq i,count)
accum[i] = count eq 0 ? 0 : total(vals[wVals])
endfor
print,accum
; 101.000 206.000 0.00000 208.000
任何有关改进这一点的建议将不胜感激!我希望 IDL 有一个类似的内置功能,但一直没能找到。也许直方图分箱有一些魔力?