首页 > 编程语言 >线性插值计算百分位数的C++示例

线性插值计算百分位数的C++示例

时间:2024-02-19 16:57:41浏览次数:16  
标签:std index val 示例 线性插值 C++ percentile sorted data

代码如下

#include <iostream>
#include <vector>
#include <algorithm>

double percentile_linear_interpolation(const std::vector<double>& data, double percentile) {
    // 确保百分位数在合理范围内
    if (percentile < 0.0 || percentile > 100.0) {
        throw std::invalid_argument("Invalid percentile value.");
    }

    // 创建临时数组并复制数据
    std::vector<double> sorted_data(data);
    
    // 对数据进行排序
    std::sort(sorted_data.begin(), sorted_data.end());

    // 计算目标索引位置(假设数据长度为N)
    int index = static_cast<int>((sorted_data.size() - 1) * percentile / 100);

    // 处理边界情况:如果百分位数正好落在整数索引上
    if (index == floor(index)) {
        return sorted_data[index];
    } else {
        // 使用线性插值
        double lower_val = sorted_data[static_cast<std::size_t>(floor(index))];
        double upper_val = sorted_data[static_cast<std::size_t>(ceil(index))];
        return lower_val + (upper_val - lower_val) * (index - floor(index));
    }
}

int main() {
    std::vector<double> data{30, 10, 40, 20, 50};
    double p25 = percentile_linear_interpolation(data, 25.0);
    std::cout << "25th percentile: " << p25 << std::endl;
    return 0;
}

 

标签:std,index,val,示例,线性插值,C++,percentile,sorted,data
From: https://www.cnblogs.com/lizhiqiang0204/p/18021470

相关文章

  • C/C++ 宏区分不同系统、编译器、语言版本
    目录区分不同系统区分不同编译器及其版本区分不同语言及其版本参考区分不同系统1)_WIN32,Windows系统_WIN64:32bitand64bit系统M_WIN64:仅64bitWindows系统M_WIN32:仅32bitWindows系统_WINDOWS:GUIApplication_CONSOLE:consoleApplication2)__APPLE__,苹果系统,包括MAC、IOST......
  • VC++ 中 CT2A CA2T 两个宏进行字符串转换简单测试
    #include"afxwin.h"#include<iostream>usingnamespacestd;intmain(){CStringcs=_T("西游记");AfxMessageBox(_T("CString:")+cs);//CString转ACSIICT2Aa_str(cs);stringstd_str(a_str);......
  • KY78 最大上升子序列和C++
    这个解决问题的思路使用动态规划,即用已知状态去得到未知状态。思路逻辑是这样sum[i]记录以A[i]为末上升子序列的和的最大值然后从j从0-i-1遍历如果A[j]<A[i]那么sum[i]=sum[j]+A[i];然后找出sum[i]中的的最大值,就是以A[i]为末上升子序列的和的最大值。这样就实现了从前......
  • FUN GAME 一款普通的C++游戏
    凑合看吧,不是完整版。#include<bits/stdc++.h>#include<windows.h>#include<conio.h>usingnamespacestd;#defineptputs#definepfprintf#definepcputchar#definesfscanf#definegtgets#defineslSleepcharname[101];stack<int>gun;bo......
  • 15. C++类中成员变量的初始化总结
    C++类中成员变量的初始化总结1.普通的变量:一般不考虑啥效率的情况下可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。classCA{public:intdata;public:CA();};/*********/CA::CA():data(0)//……#1……初始化列表方式{......
  • KY148 还是畅通工程C++
    求图的最小生成树。克鲁斯卡尔算法来解决。就是选择n-1条最小边且无回路。回路判断用并查集就行。即要加入的边(两个节点)具有相同的父节点说明如果这两个节点本来就存在路径,再加入一条边就会产生回路,舍去。#include<iostream>#include<algorithm>usingnamespacestd;struc......
  • C++ 模板的笔记1
    C++模板的笔记1C++函数模板函数模板的定义函数模板是一种可以生成不同类型函数的函数声明。函数模板的参数类型不是固定的,而是在调用时由实参类型推导出来。语法:template<typename参数列表>函数返回值类型函数名(参数列表){函数体}示例:template<typenameT>vo......
  • 【c&c++】cJSON详解
    一、JSON概述1.1JSON介绍JSON:JavaScript对象表示法(JavaScriptObjectNotation)。是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似C语音家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON......
  • 阅读下面 C++ 代码,输出结果为()
    #include<iostream>usingnamespacestd;classbase1{private:inta,b;public:base1(inti):b(i+1),a(b){}base1():b(0),a(b){}intget_a(){returna;}intget_b(){returnb;}};intmain()......
  • C++ STL map
    map<int,string>MyMap;//下标方式key值重复进行替换MyMap[0]="233";MyMap[0]="23333";//insert方法key值重复无法插入MyMap.insert(pair<int,string>(1,"zhangsan"));MyMap.insert(pair<int,string>(1,"zhangsan2"))......