ChartGPT多重插补法 填充缺失点

news/2024/5/4 14:03:49/文章来源:https://blog.csdn.net/rdhj5566/article/details/129795153

问题描述

已知时间戳与对应的值,需要根据时间戳找到缺失的点,然后进行值的填充。

例如:

源码

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-math3</artifactId>

<version>3.6.1</version>

</dependency>

引入相应的依赖包

import java.util.LinkedList;

import java.util.List;

import org.apache.commons.math3.analysis.interpolation.LinearInterpolator;

import org.apache.commons.math3.analysis.polynomials.PolynomialSplineFunction;

缺失值填充的源码:

/**

* 根据时间戳进行填充value

* @param timestamps 时间戳数组

* @param values 对应的值

* @param interval 时间戳

* @return 填充后的list

*/

public static List<Double> insertMissingByTimestamps(List<Long> timestamps,

List<Double> values,

Long interval) {

// 检查问题

if (timestamps == null || values == null ||

timestamps.size() == 0 || values.size() == 0) {

return null;

}

// 准备好线性插值

LinearInterpolator interp = new LinearInterpolator();

double[] timestampsAry = timestamps.stream().mapToDouble(d -> d).toArray();

double[] valuesAry = values.stream().mapToDouble(d -> d).toArray();

PolynomialSplineFunction insertMissingFunc = interp.interpolate(timestampsAry, valuesAry);

// 计算正常情况下有多少个点

final int normalSize = countMissingPoints(timestamps, interval);

long current = timestamps.get(0);

List<Double> target = new LinkedList<>();

// 填充

for (int i=0; i<timestamps.size() && target.size() < normalSize; ) {

// 如果存在,则添加

if (current == timestamps.get(i)) {

target.add(values.get(i));

i++;

} else {

// 如果不存在,则插值

double value = insertMissingFunc.value(current);

target.add(value);

}

current += interval;

}

return target;

}

测试用例

double[] x = { 1, 3, 4, 7, 8, 9, 10};

double[] y = { 1, 3, 4, 7, 8, 9, 10};

LinearInterpolator interp = new LinearInterpolator();

PolynomialSplineFunction f = interp.interpolate(x, y);

System.out.println("Piecewise functions:");

Arrays.stream(f.getPolynomials()).forEach(System.out::println);

double value = f.value(5);

double value2 = f.value(6);

System.out.println("x = 3, y = " + f.value(3));

System.out.println("x = 6, y = " + f.value(6));

System.out.println("x = 7, y = " + f.value(7));

测试输出内容:

1 + x

2 + x

4 + x

5 + x

8 + x

x = 3, y = 3.0

x = 6, y = 6.0

x = 7, y = 7.0

1

2

3

4

5

6

7

8

注意:如果是边界外的是不能计算的。比如这个题目中不能计算 f.value(10) 。

例子二:

import java.util.Arrays;

//多重插补法是一种处理缺失数据的方法,通过对缺失数据周围的数据进行插值,从而填补缺失值。下面是一个基于Java的简单的多重插补法示例

import org.apache.commons.math3.analysis.interpolation.LinearInterpolator;

import org.apache.commons.math3.analysis.interpolation.SplineInterpolator;

import org.apache.commons.math3.analysis.polynomials.PolynomialSplineFunction;

public class MultipleImputation {

public static void main(String[] args) {

double[] data = {1.2, 3.4, Double.NaN, 5.6, 7.8, Double.NaN, 9.0};

// 使用线性插值法进行缺失值填补

LinearInterpolator linearInterpolator = new LinearInterpolator();

PolynomialSplineFunction function = linearInterpolator.interpolate(getDataIndices(data), getDataValues(data));

for (int i = 0; i < data.length; i++) {

if (Double.isNaN(data[i])) {

data[i] = function.value(i);

}

}

// 使用样条插值法进行缺失值填补

SplineInterpolator splineInterpolator = new SplineInterpolator();

function = splineInterpolator.interpolate(getDataIndices(data), getDataValues(data));

for (int i = 0; i < data.length; i++) {

if (Double.isNaN(data[i])) {

data[i] = function.value(i);

}

}

System.out.println(Arrays.toString(data));

}

private static double[] getDataIndices(double[] data) {

double[] indices = new double[data.length];

for (int i = 0; i < data.length; i++) {

indices[i] = i;

}

return indices;

}

private static double[] getDataValues(double[] data) {

double[] values = new double[data.length];

for (int i = 0; i < data.length; i++) {

values[i] = data[i];

}

return values;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_277000.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flink执行任务运行10h以后挂掉并且报错

问题描述flink运行jar包任务&#xff0c;运行几个小时或者1天以后&#xff0c;任务就会挂掉&#xff01;&#xff01;&#xff01;第一个错误是2023-02-01 23:43:08,083 INFO org.apache.flink.runtime.executiongraph.ExecutionGraph [] - Window(TumblingEventTimeWindows(60…

【Unity】创建一个自己的AR安卓程序

目录1 环境配置2 下载官方提供的AR Starter工程3 AR Starter工程中的包以及打包设置3.1 Package Manager3.2 Player Settings4 创建一个新的AR场景5 AR场景中的物体6 在unity中运行AR场景7 在AR场景的基础上添加自己的想法7.1 修改Cube的旋转速度/方向7.2 将Cube替换为其他物体…

今年面试好激烈!

金三银四过去一半&#xff0c;市场火热&#xff0c;但是大家就业压力却没有缓解多少。 很多粉丝后台留言&#xff0c;Java程序员面临的竞争太激烈了…… 我自己也有实感&#xff0c;多年身处一线互联网公司&#xff0c;虽没有直面过求职跳槽的残酷&#xff0c;但经常担任技术面…

【开发实践】在线考试系统(一) 生成错题知识点的思维导图

一、需求分析设计 笔者开发了一个在线考试系统&#xff0c;导师提出一个需求&#xff1a;添加对考试错题相关知识点的总结。 在question表中关联知识点的编号&#xff0c;题目可能关联多个知识点。这里笔者的设计是&#xff0c;只关联一个知识点&#xff0c;便于维护。 下面是知…

【python实操】马上毕业了,你还不懂什么是守护线程、线程、进程?(附12306抢票程序-源代码)

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

预训练语言模型(GPT,BERT)

文章目录GPT 模型预训练语言模型模型和学习BERT 模型去噪自编码器模型和学习模型特点References在自然语言处理中事先使用大规模语料学习基于 Transformer 等的语言模型&#xff0c;之后用于各种任务的学习和预测&#xff0c;称这种模型为预训练语言模型。代表性的模型有 BERT …

LCX端口转发之远程桌面端口双重映射多主机转发

1.下载LCX端口转发工具源码及程序: git clone https://github.com/UndefinedIdentifier/LCX lcx1 2.复制到目标机: winxp win2003 win7

上海亚商投顾:创业板指低开高走ChatGPT概念股再爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪大小指数今日走势分化&#xff0c;沪指盘中一度跌超1%&#xff0c;午后震荡回升跌幅收窄&#xff0c;创业板指则低开…

iOS多线程——GCD学习总结

文章目录多线程编程进程线程线程与进程的关系CPU核GCD简介为什么我们要使用GCD任务同步执行&#xff08;sync&#xff09;&#xff1a;异步执行&#xff08;async&#xff09;&#xff1a;队列&#xff08;Dispatch Queue&#xff09;串行队列&#xff08;Serial Dispatch Queu…

Tensor高阶用法:快速掌握Tensor切分、变形等方法

要想在实际的应用中更灵活地用好 Tensor&#xff0c;Tensor 的连接、切分等操作也是必不可少的。我们就通过一些例子和图片来一块学习下。虽然这几个操作比较有难度&#xff0c;但只要耐心分析&#xff0c;然后上手练习&#xff0c;还是可以拿下的。 Tensor 的连接操作 在项目…

SQL语法基础

简介 SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言&#xff0c;这种语言具有交互性特点&#xff0c;能为用户提供极大的便利&#xff0c;数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。 以下介绍postgresql语法&am…

ChatGPT的多种用法(持续更新中。。。)

指南 写小说 “写一本拥有出人意料结局的推理小说。” “写一个让读者参与其中的交互小说。” “为孩子们写一本激励他们勇敢面对挑战的小说。” “编写一个有关科技创新的未来世界的小说。” “创造一个让读者感到沉浸其中的幻想故事。” 充当 Linux 终端 我想让你充当…

数据结构绪论

​ 文章目录1 知识结构2 数据结构的基本概念2.1 算法的基本概念2.2 数据结构三要素2.2.1 数据的逻辑结构线性结构非线性结构2.2.2 数据的存储&#xff08;物理&#xff09;结构数据结构的四种存储结构2.2.3 数据的运算3 算法的基本概念3.1 基本概念3.1.1 算法&#xff08;Algor…

MIPI D-PHYv2.5笔记(5) -- 不同的PHY配置方式

声明&#xff1a;作者是做嵌入式软件开发的&#xff0c;并非专业的硬件设计人员&#xff0c;笔记内容根据自己的经验和对协议的理解输出&#xff0c;肯定存在有些理解和翻译不到位的地方&#xff0c;有疑问请参考原始规范看 规范5.7章节列举了一些常见的PHY配置&#xff0c;但实…

jsp+ssm在线考试系统+错题集Spring+SpringMVC+Mybatis编写实现的项目

本系统设计了三种角色&#xff1a;管理员&#xff0c;用户和教师。通过此系统&#xff0c;教师可以在线课程信息、考试内容、在线考试、考试管理进行发布。以及在线对试卷进行批阅和批量删除&#xff0c;用户可以对自己任课老师布置的课程信息进行下载&#xff0c;对老师已经批…

TryHackMe-Willow(boot2root)

Willow 柳树下有什么&#xff1f; 端口扫描 循例 nmap NFS枚举 直接挂载进来 存在一个rsa_key 暂时不知道有啥用&#xff0c;先去看80 Web枚举 进入80 看起来像是16进制&#xff0c;使用xxd转换 得到了用户名和rsa密文 在线计算器解密一下得到ssh的私钥 需要密码 ssh2johnj…

现在转行IT还有机会吗?

其实大部分所谓的机会都是建立在我们准备好的基础上的&#xff0c;因为大多数的企业并不会启用一个零基础毫无经验&#xff0c;或者没有企业所需要特质的人员。作为普通人而言&#xff0c;只有当你准备好之后&#xff0c;你才会看到机会&#xff0c;在这之前&#xff0c;你只会…

Web自动化测试入门

1.Web自动化测试的价值&#xff08;为什么要做web自动化测试&#xff09; 我们可以使用脚本语言代替人来进行测试 2.Web自动化测试相关技术&#xff1a; Selenium:支持多语言&#xff0c;行业内最火最主流Pytest/JUnit5:最好用最全面的单元测试框架Allure:测试报告3.Web自动化…

NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具

简介 NotionAI - 文档领域的ChatGPT&#xff0c;一款 AI 加持的在线文档编辑和管理工具 作为国际领先的在线文档编辑和管理工具&#xff0c;Notion受到了广大用户的欢迎&#xff0c;尤其是程序员们。它不仅支持笔记、编码等基本的在线文档功能&#xff0c;还支持团队协作、项…

简单XXE漏洞理解以及在实战中演练【网络安全】

1.概念 XXE(XML External Entity Injection) 全称为 XML 外部实体注入。这是一个注入漏洞&#xff0c;强调利用点是外部实体 &#xff0c;将注意力集中于外部实体中&#xff0c;而不要被 XML 中其他的一些名字相似的东西扰乱了思维&#xff0c;如果能注入 外部实体并且成功解析…