You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何np.repeat性能如此高效?Rust实现Poisson bootstrap中repeat函数的性能优化问询

为何np.repeat性能如此高效?Rust实现Poisson bootstrap中repeat函数的性能优化问询

最近我在Rust里实现Poisson bootstrap,特意把自己写的repeat函数和numpy的np.repeat做了性能对比。先给大家说下这个repeat函数的功能:它接收两个参数,一个是数据数组,一个是权重数组,作用是把数据里的每个元素按照对应的权重次数重复输出,比如输入[1, 2, 3]和[1, 2, 0],输出就是[1, 2, 2]。

但实测下来,我写的 naive 版本居然比np.repeat慢了大概4.5倍,这差距有点超出预期,所以想请教下大家:

先贴我目前的Rust实现(naive版):

pub fn repeat_by(arr: &[f64], repeats: &[u64]) -> Vec<f64> {
    arr.iter()
        .zip(repeats.iter())
        .flat_map(|(&val, &cnt)| std::iter::repeat(val).take(cnt as usize))
        .collect()
}

我的几个核心问题:

  • 为啥np.repeat性能能这么强?是因为底层用了C写的内存预分配、SIMD指令,还是有其他更巧妙的优化?
  • 我的Rust代码大概率是哪里拖了后腿?会不会是flat_map搭配repeat迭代器的组合产生了过多的小迭代器开销?
  • 针对Poisson bootstrap的场景(这里的权重是泊松分布生成的整数),有没有更适配Rust的优化方向?比如提前计算总长度预分配内存,或者用更底层的内存循环/拷贝代替迭代器?

希望有经验的大佬能给我点优化思路,感激不尽!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:59:50