Java中使用arima预测未来数据

看着已经存在的曲线图数据,想预估下后面曲线图的数据。


import java.util.Vector;public class AR {double[] stdoriginalData={};int p;ARMAMath armamath=new ARMAMath();/*** AR模型* @param stdoriginalData* @param p //p为MA模型阶数*/public AR(double [] stdoriginalData,int p){this.stdoriginalData=stdoriginalData;this.p=p;}/*** 返回AR模型参数* @return*/public Vector<double[]> ARmodel(){Vector<double[]> v=new Vector<double[]>();v.add(armamath.parcorrCompute(stdoriginalData, p, 0));return v;//得到了自回归系数//还要估计方差项吗?}}
package com.xxx.xxx.xxx.util.arima;import com.alibaba.fastjson.JSON;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Vector;public class ARIMA {double[] originalData={};ARMAMath armamath=new ARMAMath();double stderrDara=0;double avgsumData=0;Vector<double[]> armaARMAcoe=new Vector<double[]>();Vector<double[]> bestarmaARMAcoe=new Vector<double[]>();/*** 构造函数* @param originalData 原始时间序列数据*/public ARIMA(double [] originalData){this.originalData=originalData;}/*** 原始数据标准化处理:一阶季节性差分* @return 差分过后的数据*/public double[] preDealDif(){//seasonal Difference:Peroid=7double []tempData=new double[originalData.length-7];for(int i=0;i<originalData.length-7;i++){tempData[i]=originalData[i+7]-originalData[i];}return tempData;}/*** 原始数据标准化处理:Z-Score归一化*  待处理数据* @return 归一化过后的数据*/public double[] preDealNor(double[] tempData){//Z-ScoreavgsumData=armamath.avgData(tempData);stderrDara=armamath.stderrData(tempData);for(int i=0;i<tempData.length;i++){tempData[i]=(tempData[i]-avgsumData)/stderrDara;}return tempData;}/*** 得到ARMA模型=[p,q]* @return ARMA模型的阶数信息*/public int[] getARIMAmodel(){double[] stdoriginalData=this.preDealDif();//原始数据差分处理int paraType=0;double minAIC=9999999;int bestModelindex=0;int[][] model=new int[][]{{0,1},{1,0},{1,1},{0,2},{2,0},{2,2},{1,2},{2,1}};//,{3,0},{0,3},{3,1},{1,3},{3,2},{2,3},{3,3}};//,{4,0},{0,4},{4,1},{1,4},{4,2},{2,4},{4,3},{3,4},{4,4}};//对8种模型进行迭代,选出AIC值最小的模型作为我们的模型for(int i=0;i<model.length;i++){if(model[i][0]==0){MA ma=new MA(stdoriginalData, model[i][1]);armaARMAcoe=ma.MAmodel(); //拿到ma模型的参数paraType=1;}else if(model[i][1]==0){AR ar=new AR(stdoriginalData, model[i][0]);armaARMAcoe=ar.ARmodel(); //拿到ar模型的参数paraType=2;}else{ARMA arma=new ARMA(stdoriginalData, model[i][0], model[i][1]);armaARMAcoe=arma.ARMAmodel();//拿到arma模型的参数paraType=3;}double temp=getmodelAIC(armaARMAcoe,stdoriginalData,paraType);//System.out.println("AIC of these model="+temp);if (temp<minAIC){bestModelindex=i;minAIC=temp;bestarmaARMAcoe=armaARMAcoe;}}return model[bestModelindex];}/*** 计算ARMA模型的AIC* @param para 装载模型的参数信息* @param stdoriginalData   预处理过后的原始数据* @param type 1:MA;2:AR;3:ARMA* @return 模型的AIC值*/public double getmodelAIC(Vector<double[]> para,double[] stdoriginalData,int type){double temp=0;double temp2=0;double sumerr=0;int p=0;//ar1,ar2,...,sig2int q=0;//sig2,ma1,ma2...int n=stdoriginalData.length;Random random=new Random();if(type==1){double[] maPara=para.get(0);q=maPara.length;double[] err=new double[q];  //error(t),error(t-1),error(t-2)...for(int k=q-1;k<n;k++){temp=0;for(int i=1;i<q;i++){temp+=maPara[i]*err[i];}//产生各个时刻的噪声for(int j=q-1;j>0;j--){err[j]=err[j-1];}err[0]=random.nextGaussian()*Math.sqrt(maPara[0]);//估计的方差之和sumerr+=(stdoriginalData[k]-(temp))*(stdoriginalData[k]-(temp));}//return  (n-(q-1))*Math.log(sumerr/(n-(q-1)))+(q)*Math.log(n-(q-1));//AIC 最小二乘估计return (n-(q-1))*Math.log(sumerr/(n-(q-1)))+(q+1)*2;}else if(type==2){double[] arPara=para.get(0);p=arPara.length;for(int k=p-1;k<n;k++){temp=0;for(int i=0;i<p-1;i++){temp+=arPara[i]*stdoriginalData[k-i-1];}//估计的方差之和sumerr+=(stdoriginalData[k]-temp)*(stdoriginalData[k]-temp);}return (n-(q-1))*Math.log(sumerr/(n-(q-1)))+(p+1)*2;//return (n-(p-1))*Math.log(sumerr/(n-(p-1)))+(p)*Math.log(n-(p-1));//AIC 最小二乘估计}else{double[] arPara=para.get(0);double[] maPara=para.get(1);p=arPara.length;q=maPara.length;double[] err=new double[q];  //error(t),error(t-1),error(t-2)...for(int k=p-1;k<n;k++){temp=0;temp2=0;for(int i=0;i<p-1;i++){temp+=arPara[i]*stdoriginalData[k-i-1];}for(int i=1;i<q;i++){temp2+=maPara[i]*err[i];}//产生各个时刻的噪声for(int j=q-1;j>0;j--){err[j]=err[j-1];}//System.out.println("predictBeforeDiff="+1);err[0]=random.nextGaussian()*Math.sqrt(maPara[0]);//估计的方差之和sumerr+=(stdoriginalData[k]-(temp2+temp))*(stdoriginalData[k]-(temp2+temp));}return (n-(q-1))*Math.log(sumerr/(n-(q-1)))+(p+q)*2;//return (n-(p-1))*Math.log(sumerr/(n-(p-1)))+(p+q-1)*Math.log(n-(p-1));//AIC 最小二乘估计}}/*** 对预测值进行反差分处理* @param predictValue 预测的值* @return 反差分过后的预测值*/public int aftDeal(int predictValue){//System.out.println("predictBeforeDiff="+predictValue);return (int)(predictValue+originalData[originalData.length-7]);}/*** 进行一步预测* @param p ARMA模型的AR的阶数* @param q ARMA模型的MA的阶数* @return 预测值*/public int predictValue(int p,int q){int predict=0;double[] stdoriginalData=this.preDealDif();int n=stdoriginalData.length;double temp=0,temp2=0;double[] err=new double[q+1];Random random=new Random();if(p==0){double[] maPara=bestarmaARMAcoe.get(0);for(int k=q;k<n;k++){temp=0;for(int i=1;i<=q;i++){temp+=maPara[i]*err[i];}//产生各个时刻的噪声for(int j=q;j>0;j--){err[j]=err[j-1];}err[0]=random.nextGaussian()*Math.sqrt(maPara[0]);}predict=(int)(temp); //产生预测}else if(q==0){double[] arPara=bestarmaARMAcoe.get(0);for(int k=p;k<n;k++){temp=0;for(int i=0;i<p;i++){temp+=arPara[i]*stdoriginalData[k-i-1];}}predict=(int)(temp);}else{double[] arPara=bestarmaARMAcoe.get(0);double[] maPara=bestarmaARMAcoe.get(1);err=new double[q+1];  //error(t),error(t-1),error(t-2)...for(int k=p;k<n;k++){temp=0;temp2=0;for(int i=0;i<p;i++){temp+=arPara[i]*stdoriginalData[k-i-1];}for(int i=1;i<=q;i++){temp2+=maPara[i]*err[i];}//产生各个时刻的噪声for(int j=q;j>0;j--){err[j]=err[j-1];}err[0]=random.nextGaussian()*Math.sqrt(maPara[0]);}predict=(int)(temp2+temp);}return predict;}/*** 计算MA模型的参数* @param autocorData 自相关系数Grma* @param q MA模型的阶数* @return 返回MA模型的参数*/public double[] getMApara(double[] autocorData,int q){double[] maPara=new double[q+1];//第一个存放噪声参数,后面q个存放ma参数sigma2,ma1,ma2...double[] tempmaPara=maPara;double temp=0;boolean iterationFlag=true;//解方程组//迭代法解方程组//System.out.println("autocorData[0]"+autocorData[0]);while(iterationFlag){for(int i=1;i<maPara.length;i++){temp+=maPara[i]*maPara[i];}tempmaPara[0]=autocorData[0]/(1+temp);for(int i=1;i<maPara.length;i++){temp=0;for(int j=1;j<maPara.length-i;j++){temp+=maPara[j]*maPara[j+i];}tempmaPara[i]=-(autocorData[i]/tempmaPara[0]-temp);}iterationFlag=false;for(int i=0;i<maPara.length;i++){if(maPara[i]!=tempmaPara[i]){iterationFlag=true;break;}}maPara=tempmaPara;}return maPara;}public static int[] generator(int size, List<Double> arraylist){int[] returnArray=new int[size];for (int i = 0; i <size ; i++) {double[] dataArray=new double[arraylist.size()];for(int j=0;j<arraylist.size()-1;j++) {dataArray[j] = arraylist.get(j);}//使用当前数据训练ARIMA模型ARIMA arima=new ARIMA(dataArray);//获得ARIM模型int []model=arima.getARIMAmodel();//System.out.println("Best model is [p,q]="+"["+model[0]+" "+model[1]+"]");//System.out.println("最佳模型是[p,q]="+"["+model[0]+" "+model[1]+"]");int deal = arima.aftDeal(arima.predictValue(model[0], model[1]));//System.out.println("Predict value="+deal);//System.out.println("预测值="+deal);//System.out.println("Predict error="+(deal-arraylist.get(arraylist.size()-1))/arraylist.get(arraylist.size()-1)*100+"%");//System.out.println("预测差值="+(deal-arraylist.get(arraylist.size()-1))/arraylist.get(arraylist.size()-1)*100+"%");arraylist.add(deal+0.0);returnArray[i]=deal;}//System.out.println(JSON.toJSON(arraylist));//System.out.println(JSON.toJSON(returnArray));return returnArray;}public static int[] arimaLists(List<Double> arraylist) {if (arraylist.size()<10){System.out.println("创建ARIMA模型数据最少10条");return new int[]{0,0,0,0,0,0,0};}int[] ints = generator(7, arraylist);return ints;}
}
package com.xxx.xxx.xxx.util.arima;import java.util.ArrayList;
import java.util.Vector;public class ARMA {double[] stdoriginalData={};int p;int q;ARMAMath armamath=new ARMAMath();/*** ARMA模型* @param stdoriginalData* @param p,q //p,q为MA模型阶数*/public ARMA(double [] stdoriginalData,int p,int q){this.stdoriginalData=stdoriginalData;this.p=p;this.q=q;}public Vector<double[]> ARMAmodel(){double[] arcoe=armamath.parcorrCompute(stdoriginalData, p, q);double[] autocorData=getautocorofMA(p, q, stdoriginalData, arcoe);double[] macoe=armamath.getMApara(autocorData, q);//得到MA模型里面的参数值
//		for(int i=0;i<macoe.length;i++)
//			{
//				System.out.println(macoe[i]);
//			}
//		System.out.println();Vector<double[]> v=new Vector<double[]>();v.add(arcoe);v.add(macoe);return v;}/*** 得到MA的自相关系数* @param p* @param q* @param stdoriginalData* @param autoRegress* @return*/public double[] getautocorofMA(int p,int q,double[] stdoriginalData,double[] autoRegress){int temp=0;double[] errArray=new double[stdoriginalData.length-p];int count=0;for(int i=p;i<stdoriginalData.length;i++){temp=0;for(int j=1;j<=p;j++)temp+=stdoriginalData[i-j]*autoRegress[j-1];errArray[count++]=stdoriginalData[i]-temp;//保存估计残差序列}return armamath.autocorGrma(errArray, q);}}
package com.xxx.xxx.xxx.util.arima;import Jama.Matrix;public class ARMAMath
{public double avgData(double[] dataArray){return this.sumData(dataArray)/dataArray.length;}public double sumData(double[] dataArray){double sumData=0;for(int i=0;i<dataArray.length;i++){sumData+=dataArray[i];}return sumData;}public double stderrData(double[] dataArray){return Math.sqrt(this.varerrData(dataArray));}public double varerrData(double[] dataArray){double variance=0;double avgsumData=this.avgData(dataArray);for(int i=0;i<dataArray.length;i++){dataArray[i]-=avgsumData;variance+=dataArray[i]*dataArray[i];}return variance/dataArray.length;//variance error;}/*** 计算自相关的函数 Tho(k)=Grma(k)/Grma(0)* @param dataArray 数列* @param order 阶数* @return*/public double[] autocorData(double[] dataArray,int order){double[] autoCor=new double[order+1];double varData=this.varerrData(dataArray);//标准化过后的方差for(int i=0;i<=order;i++){autoCor[i]=0;for(int j=0;j<dataArray.length-i;j++){autoCor[i]+=dataArray[j+i]*dataArray[j];}autoCor[i]/=dataArray.length;autoCor[i]/=varData;}return autoCor;}/*** Grma* @param dataArray* @param order* @return 序列的自相关系数*/public double[] autocorGrma(double[] dataArray,int order){double[] autoCor=new double[order+1];for(int i=0;i<=order;i++){autoCor[i]=0;for(int j=0;j<dataArray.length-i;j++){autoCor[i]+=dataArray[j+i]*dataArray[j];}autoCor[i]/=(dataArray.length-i);}return autoCor;}/*** 求偏自相关系数* @param dataArray* @param order* @return*/public double[] parautocorData(double[] dataArray,int order){double parautocor[]=new double[order];for(int i=1;i<=order;i++){parautocor[i-1]=this.parcorrCompute(dataArray, i,0)[i-1];}return parautocor;}/*** 产生Toplize矩阵* @param dataArray* @param order* @return*/public double[][] toplize(double[] dataArray,int order){//返回toplize二维数组double[][] toplizeMatrix=new double[order][order];double[] atuocorr=this.autocorData(dataArray,order);for(int i=1;i<=order;i++){int k=1;for(int j=i-1;j>0;j--){toplizeMatrix[i-1][j-1]=atuocorr[k++];}toplizeMatrix[i-1][i-1]=1;int kk=1;for(int j=i;j<order;j++){toplizeMatrix[i-1][j]=atuocorr[kk++];}}return toplizeMatrix;}/*** 解MA模型的参数* @param autocorData* @param q* @return*/public double[] getMApara(double[] autocorData,int q){double[] maPara=new double[q+1];//第一个存放噪声参数,后面q个存放ma参数sigma2,ma1,ma2...double[] tempmaPara=maPara;double temp=0;boolean iterationFlag=true;//解方程组//迭代法解方程组maPara[0]=1;//初始化while(iterationFlag){for(int i=1;i<maPara.length;i++){temp+=maPara[i]*maPara[i];}tempmaPara[0]=autocorData[0]/(1+temp);for(int i=1;i<maPara.length;i++){temp=0;for(int j=1;j<maPara.length-i;j++){temp+=maPara[j]*maPara[j+i];}tempmaPara[i]=-(autocorData[i]/maPara[0]-temp);}iterationFlag=false;for(int i=0;i<maPara.length;i++){if(maPara[i]!=tempmaPara[i]){iterationFlag=true;break;}}maPara=tempmaPara;}return maPara;}/*** 计算自回归系数* @param dataArray* @param p* @param q* @return*/public double[] parcorrCompute(double[] dataArray,int p,int q){double[][] toplizeArray=new double[p][p];//p阶toplize矩阵;double[] atuocorr=this.autocorData(dataArray,p+q);//返回p+q阶的自相关函数double[] autocorrF=this.autocorGrma(dataArray, p+q);//返回p+q阶的自相关系数数for(int i=1;i<=p;i++){int k=1;for(int j=i-1;j>0;j--){toplizeArray[i-1][j-1]=atuocorr[q+k++];}toplizeArray[i-1][i-1]=atuocorr[q];int kk=1;for(int j=i;j<p;j++){toplizeArray[i-1][j]=atuocorr[q+kk++];}}Matrix toplizeMatrix = new Matrix(toplizeArray);//由二位数组转换成二维矩阵Matrix toplizeMatrixinverse=toplizeMatrix.inverse();//矩阵求逆运算double[] temp=new double[p];for(int i=1;i<=p;i++){temp[i-1]=atuocorr[q+i];}Matrix autocorrMatrix=new Matrix(temp, p);Matrix parautocorDataMatrix=toplizeMatrixinverse.times(autocorrMatrix); //  [Fi]=[toplize]x[autocorr]';//矩阵计算结果应该是按照[a b c]'  列向量存储的//System.out.println("row="+parautocorDataMatrix.getRowDimension()+"  Col="+parautocorDataMatrix.getColumnDimension());//parautocorDataMatrix.print(p, 2);//(输出几行,小数点后保留位数)//System.out.println(parautocorDataMatrix.get(p-1,0));double[] result=new double[parautocorDataMatrix.getRowDimension()+1];for(int i=0;i<parautocorDataMatrix.getRowDimension();i++){result[i]=parautocorDataMatrix.get(i,0);}//估算sigmat2double sum2=0;for(int i=0;i<p;i++)for(int j=0;j<p;j++){sum2+=result[i]*result[j]*autocorrF[Math.abs(i-j)];}result[result.length-1]=autocorrF[0]-sum2; //result数组最后一个存储干扰估计值return result;   //返回0列的最后一个就是k阶的偏自相关系数 pcorr[k]=返回值}}
package com.xxx.xxx.xxx.util.arima;import java.util.Vector;public class MA {double[] stdoriginalData={};int q;ARMAMath armamath=new ARMAMath();/** MA模型* @param stdoriginalData //预处理过后的数据* @param q //q为MA模型阶数*/public MA(double [] stdoriginalData,int q){this.stdoriginalData=stdoriginalData;this.q=q;}/*** 返回MA模型参数* @return*/public Vector<double[]> MAmodel(){Vector<double[]> v=new Vector<double[]>();v.add(armamath.getMApara(armamath.autocorGrma(stdoriginalData,q), q));return v;//拿到MA模型里面的参数值}}
package com.xxx.xxx.xxx.util.arima;import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;import static com.alibaba.druid.sql.ast.SQLPartitionValue.Operator.List;public class Test1 {public static void main(String args[]) {
//		extracted();ArrayList<Double> arraylist = new ArrayList<Double>();arraylist.add(1.0d);arraylist.add(2.0d);arraylist.add(3.0d);arraylist.add(4.0d);arraylist.add(5.0d);arraylist.add(6.0d);arraylist.add(7.0d);arraylist.add(8.0d);arraylist.add(8.0d);arraylist.add(8.0d);arraylist.add(8.0d);arraylist.add(8.0d);int[] ints = ARIMA.arimaLists(arraylist);System.err.println(Arrays.toString(ints));}}

以上是示例,传入已有的参数预估后面的值
在这里插入图片描述
当前时间为7.2号,后面一周的数据是根据之前一个月的数据预估的趋势。
页面上的趋势图只显示前后一周。

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

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

相关文章

你的硬盘知道的太多:你以为你的秘密真的被删除了吗?

某一天你收到了朋友发给你的一个秘密文件&#xff0c;在看完之后&#xff0c;为了不被别人发现&#xff0c;你决定将文件毁尸灭迹&#xff01; 你选中文件名称 / 右键 / 删除&#xff0c;好了&#xff0c;文件已经消失了。但你是懂电脑的&#xff0c;知道文件此时还在回收站里面…

海外虚拟卡开卡平台有哪些?无限开卡,无其他限制

随着时代的发展很多小伙伴都需要海外虚拟卡&#xff0c;海外虚拟卡开卡平台我这里用的是Fomepay的&#xff0c;他们比较人性化&#xff0c;有客服&#xff0c;随时可咨询 对于消费者而言&#xff0c;虚拟卡号提供了隐私&#xff0c;因此广告商更难以跟踪和定位购买行为&#x…

《python程序语言设计》2018版第5章第50题利用turtle编程显示三角形图案

2024.06.18 05.50.01version 首先我觉得还是应该现从简单阵列来进行。非常简单。顺便回忆一下我3月份做的5.19题里那些淘气的数列 代码成功 #将i从10设计成12打印的毕竟好看 for i in range(1,12):#这这里给结尾的i2效果并不好看for j in range(1,i):print(j,end" "…

【深度学习】Transformer

李宏毅深度学习笔记 https://blog.csdn.net/Tink1995/article/details/105080033 https://blog.csdn.net/leonardotu/article/details/135726696 https://blog.csdn.net/u012856866/article/details/129790077 Transformer 是一个基于自注意力的序列到序列模型&#xff0c;与基…

软件测试与质量保证 | 云班课选择题库

目录 第1章课后习题 第2章课后习题 第3章课后习题 第4章课后习题 第5章课后习题 第6章课后习题 第7章课后习题 第8章课后习题 第9章课后习题 第10章课后习题 第11章课后习题 第12章课后习题 第13章 测试相关未分类习题 第1章课后习题 1. 与质量相关的概念包括 &a…

可充电纽扣电池ML2032充电电路设计

如图&#xff0c;可充电纽扣电池ML2032充电电路设计。 图中二极管是为了防止电流倒灌&#xff0c; 电阻分压出3.66v&#xff0c;再减掉二极管压降&#xff08;约0.4v)得3.26V&#xff0c;加在电池正负极充电。 随着电池电量的积累&#xff0c;充电电流逐步减小&#xff0c;极限…

什么样的企业适合SD-WAN网络专线?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;是一种网络技术&#xff0c;它利用软件定义的方式管理和控制广域网&#xff08;WAN&#xff09;&#xff0c;旨在提高网络效率、降低成本并简化网络管理。以下是适合采用SD-WAN网络…

服务器之BIOS基础知识总结

1.BIOS是什么&#xff1f; BIOS全称Basic Input Output System&#xff0c;即基本输入输出系统&#xff0c;是固化在服务器主板的专用ROM上&#xff0c;加载在服务器硬件系统上最基本的运行程序&#xff0c;它位于服务器硬件和OS之间&#xff0c;在服务器启动过程中首先运行&am…

HUAWEI MPLS 静态配置和动态LDP配置

MPLS(Multi-Protocol Label Switching&#xff0c;多协议标签交换技术)技术的出现&#xff0c;极大地推动了互联网的发展和应用。例如&#xff1a;利用MPLS技术&#xff0c;可以有效而灵活地部署VPN(Virtual Private Network&#xff0c;虚拟专用网)&#xff0c;TE(Traffic Eng…

pdf怎么拆分成一页一页?4种拆分方法分享

在日常的办公学习中&#xff0c;PDF文档因其跨平台、易阅读、不易篡改等特性&#xff0c;成为我们工作和学习中不可或缺的一部分。然而&#xff0c;当我们需要对PDF进行编辑、打印或分享时&#xff0c;有时需要将整个PDF文档拆分成一页一页的单独文件。那么&#xff0c;如何高效…

2024 AIGC 技术创新应用研讨会暨数字造型设计师高级研修班通知

尊敬的老师、领导您好! 为深入响应国家关于教育综合改革的战略部署&#xff0c;深化职业教育、高等教育改革&#xff0c;发挥企业主体重要作用&#xff0c;促进人才培养供给侧和产业需求侧结构要素全方位融合&#xff0c;充分把握人工智能创意式生成(AIGC)技术在教育领域的发展…

初学Spring之 IOC 控制反转

Spring 是一个轻量级的控制反转&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;的框架 导入 jar 包&#xff1a;spring-webmvc、spring-jdbc <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc&l…

HTTPS数字证书验证论述

1 概述 网络请求方式通常分为两种&#xff0c;分别是HTTP请求和HTTPS请求&#xff0c;其中HTTP的传输属于明文传输&#xff0c;在传输的过程中容易被人截取并且偷窥其中的内容&#xff0c;而HTTPS是一种在HTTP的基础上加了SSL/TLS层&#xff08;安全套接层&#xff09;的安全的…

Ubuntu24.04 Isaacgym的安装

教程1 教程2 教程3 1.下载压缩包 link 2. 解压 tar -xvf IsaacGym_Preview_4_Package.tar.gz核心教程在 isaacgym/docs/install.html下 3. 从源码安装 Ubuntu24.04还需首先进入虚拟环境 python -m venv myenv # 创建虚拟环境&#xff0c;已有可跳过 source myenv/bin/a…

Redis持久化详解

【关闭文件、AOF 刷盘、释放内存这三个任务都有各自的任务队列】所以不是单线程 Redis有两种持久化方案&#xff1a; RDB持久化 AOF持久化 基于Redis集群解决单机Redis存在的问题 【Redis是单进程的】 【也有人做分布式section】 【主从集群中多个从就是做负载均衡的】 …

while陈述

回圈是用来进行进行重复性的工作&#xff0c;典型的回圈会进行下列三项基本任务 1. 控制变数初始设定2. 回圈结束条件测试3. 调整控制变数的值 关键字 while构成C 中回圈的一种&#xff0c;常用于没有确定重复次数的回圈&#xff0c;同时while后面接着小括弧为回圈结束的条件…

上位机第二弹

之前写的代码用上了 现在想想 &#xff0c;北向一侧还挺难搞&#xff0c;设计很巧妙

Continual Test-Time Domain Adaptation--论文笔记

论文笔记 资料 1.代码地址 https://github.com/qinenergy/cotta 2.论文地址 https://arxiv.org/abs/2203.13591 3.数据集地址 论文摘要的翻译 TTA的目的是在不使用任何源数据的情况下&#xff0c;将源预先训练的模型适应到目标域。现有的工作主要考虑目标域是静态的情况…

python - 列表 / 元组 / 字符串

一.列表 由于pyhon的变量没有数据类型&#xff0c;所以python是没有数组的&#xff08;因为数组只能存放一种类型&#xff0c;要么全部存放整型&#xff0c;要么全部存放浮点型&#xff09;&#xff0c;只有列表list&#xff0c;所以整数&#xff0c;浮点数&#xff0c;字符串…

传输线阻抗匹配电阻端接的方式

电路为什么需要端接&#xff1f; 众所周知&#xff0c;电路中如果阻抗不连续&#xff0c;就会造成信号的反射&#xff0c;引起上冲下冲、振铃等信号失真&#xff0c;严重影响信号质量。所以在进行电路设计的时候阻抗匹配是很重要的考虑因素。 对我们的PCB走线进行阻抗控制已经…