如何将基于分位数邻近值修改数组值的R代码改写为Python实现
需求描述
- 输入数值数组:
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 123, 154, 243, 213, 1231241237, 1231241236, 1231241239 - 目标输出结果:
1, 1, 1, 1, 1, 1 ,1 ,1, 1, 1, 1, 1, 1, 154, 154, 154, 154, 154, 1231241239, 1231241239, 1231241239 - 核心规则:计算数组的0%、25%、50%、75%、100%分位点,将数组中每个元素替换为距离它最近的分位点值
参考R代码
vector <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 123, 154, 243, 213, 1231241237, 1231241236, 1231241239) q <- quantile(vector, probs = c(0, 0.25, 0.5, 0.75, 1)) %>% unname() q[sapply(vector, function(x) which.min(abs(x - q)))]
Python版本实现
使用numpy实现和R完全一致的逻辑,运行结果匹配目标输出:
import numpy as np # 输入数组 vector = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 123, 123, 154, 243, 213, 1231241237, 1231241236, 1231241239]) # 计算五个指定分位点,对齐R默认分位计算规则 q = np.quantile(vector, q=[0, 0.25, 0.5, 0.75, 1]) # 逐元素匹配距离最近的分位点完成替换 result = q[np.argmin(np.abs(vector[:, np.newaxis] - q), axis=1)] print(result) # 输出:[ 1 1 1 1 1 1 1 # 1 1 1 1 1 1 154 # 154 154 154 154 1231241239 1231241239 1231241239]
内容的提问来源于stack exchange,提问作者Avraam
相关产品推荐
相关产品推荐

