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

如何实现Numpy数组按指定规则的最快转换?

高效实现Numpy数组的区间分类转换

直接用Numpy内置的向量化操作就能搞定,完全不用写for循环,速度拉满。这里推荐两种高效方法:

方法一:用np.digitize(最简洁,适合多区间场景)

np.digitize是专门为区间分箱设计的函数,底层用C实现,效率极高。只需要定义好区间边界,就能一键完成分类:

import numpy as np

# 原数组
arr = np.array([2, 5, 10, 13, 7, 9])
# 定义区间边界:[1,5)对应0,[5,10)对应1,[10,16)对应2
bins = [1, 5, 10, 16]
# 用digitize得到每个元素的区间索引,减1后就是目标分类值
result = np.digitize(arr, bins) - 1

print(result)  # 输出:array([0, 1, 2, 2, 1, 1])

原理:np.digitize会返回每个元素所在区间的右边界索引,我们设置的bins刚好对应每个分类的左起点(最后一个值是上限+1,确保15能被包含),所以减1后正好匹配你要的0/1/2分类。

方法二:嵌套np.where(适合少区间场景)

如果区间不多,用嵌套的np.where也很直观,同样是向量化操作,速度一样快:

import numpy as np

arr = np.array([2, 5, 10, 13, 7, 9])
result = np.where(arr <= 4, 0, np.where(arr <= 9, 1, 2))

print(result)  # 输出:array([0, 1, 2, 2, 1, 1])

这两种方法都避免了Python循环的性能损耗,数组越大,比for循环的速度优势越明显——比如处理百万级元素时,速度能差几十甚至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:02:40