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

如何用Numpy/Scipy实现数组降长重采样(取区间最大值)

用Numpy高效实现数组区间最大值聚合(音频信号场景)

你需要将长Numpy数组按固定区间分割,每个区间取最大值生成短数组,替代当前的循环实现。这里有两种更高效的向量化实现方式:

方式一:舍去最后不足一个区间的元素(与原代码逻辑一致)

直接截取数组到能被区间长度整除的部分,再通过reshape和max完成聚合:

import numpy as np

# 示例数组,长度510
a = np.random.rand(510)
shorten_length = 50

# 计算有效长度,舍去末尾不足一个区间的部分
valid_len = (len(a) // shorten_length) * shorten_length
a_shortened = a[:valid_len].reshape(-1, shorten_length).max(axis=1)

这种方式完全匹配你原代码的逻辑,且依赖Numpy的向量化操作,比Python循环效率高得多,尤其适合音频这类大数据量场景。

方式二:保留末尾不足区间的元素

如果不想丢弃最后一段不足shorten_length的元素,可先补零凑整再聚合:

import numpy as np

a = np.random.rand(510)
shorten_length = 50

# 计算需要补零的长度,确保总长度能被区间长度整除
pad_len = (shorten_length - len(a) % shorten_length) % shorten_length
a_padded = np.pad(a, (0, pad_len), mode='constant')
a_shortened = a_padded.reshape(-1, shorten_length).max(axis=1)

最终得到的数组长度为ceil(510/50)=11,最后一个元素是原数组末尾10个元素的最大值。

内容的提问来源于stack exchange,提问作者escapecharacter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:47:17