介绍
这篇文章将为大家详细讲解有关java如何计算中位数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
最近工作需要要求把python的代码写成java版本,python中有一个np。()求中位数中位数的方法,java决定手写一个
<强>先说说什么是中位数:强>
中位数就是中间的那个数,
如果一个集合是奇数个,那么中位数就是按大小排列后,最中间那个数,
如果一个集合是偶数个,那么中位数就是按大小排列后,最中间那两个数的平均数。
<强>比如:强>
1, 2, 3, 4, 5那中位数就是3
1, 2, 3, 4, 5, 6那中位数就是(3 + 4)/2=3.5
知道逻辑后方法就很简单了下面是代码
公共静态void main (String [] args) { List总=new ArrayList (); total.add (4); total.add (2); total.add (3); total.add (1); total.add (5); total.add (6); 双a=值(总); System.out.println(一个); } 私有静态双位数(List ){ 双j=0;//集合排序 Collections.sort(总); int大?total.size (); 如果(大小% 2==1){ j=total.get((号)/2); 其他}{//加0.0是为了把int转成两类型,否则除以2会算错 j=(total.get(大?2 - 1)+ total.get(大?2)+ 0.0)/2; } 返回j; }
1。方法内先判断集合是奇数还是偶数,如果是奇数那么就是第n + 1/2个数,也就是下标为n-1/2的值,
如果是偶数就是第n/2和n/2 + 1的数的平均值也就是下标为n/2和n/2的平均值
2。该方法传入的是集列表合如果为数组可以先用arrays . aslist()方法转换后传入
<强> Java计算中位数,方差,标准差,众数强>
我就废话不多说了,大家还是直接看代码吧~
进口java.text.DecimalFormat; 进口java.util。*;/* * *数学算法(数学算法(方差,标准差,中位数,众数)) * @author * */公开课MathAlgorithm { 私人最终静态双距离=999;//Double.MAX_VALUE;//双类型的最大值,太大的双值,相乘会达到无穷大 私人最终静态双dmin=Double.MIN_VALUE;//双类型的最小值 私人最终静态整数n=100;//假设求取100个房子数的方差和标准差 公共静态void main (String [] args) { 随机随机=new随机(); 双[]x=新双[n]; for (int i=0;我& lt;n;我+ +){//随机生成n个数的两倍 x[我]=Double.valueOf (Math.floor (random.nextDouble() *(距离- dmin))); System.out.println (x[我]); }//设置房子字符串输出格式,不以科学计数法输出 DecimalFormat df=new DecimalFormat(“#, # # 0.00“);//格式化设置//计算方差 双dV=getVariance (x); System.out.println(“方差=?+ df.format (dV));//计算标准差 双dS=getStandardDiviation (x); System.out.println(“标准差=?+ df.format (dS)); int [] intArr={5 10 15 8 6}; System.out.println (Arrays.toString (intArr) +“;中位数:“+ (intArr)中位数); int [] intArr2={5、10、15、8、6、7}; System.out.println (Arrays.toString (intArr2) +“;中位数:“+ (intArr2)中位数); int [] arr={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 1, 2, 2, 3, 4, 5}; ListmodalNums=getModalNums (arr); System.out.println(“众数:“+ modalNums); 浮动[]arr2={3.1 2.1 1.1 0.1 f, f, f, f, f 4.1, 5.1, 6.1, 7.1, 8.1, 9.1, 10.1, 1.1, 1.1, 2.1, 2.1, 3.1, 4.1, 5.1 f}; List modalNums2=getModalNums (arr2); System.out.println(“众数:“+ modalNums2); }/* * *方差s ^ 2=[(x1 x) ^ 2 +…(xn-x) ^ 2)/n * @param x * @return */公共静态双getVariance (double [] x) { int m=x.length; 双金额=0; for (int i=0;我& lt;m;我+ +){//求和 和+=x[我]; } 双戴夫=总和/m;//求平均值 双dVar=0; for (int i=0;我& lt;m;我+ +){//求方差 dVar +=(x[我]-戴夫)* (x[我]-戴夫); } 返回dVar/m; }/* * *标准差σ=蘳 ^ 2) * @param x * @return */公共静态双getStandardDiviation (double [] x) { int m=x.length; 双金额=0; for (int i=0;我& lt;m;我+ +){//求和 和+=x[我]; } 双戴夫=总和/m;//求平均值 双dVar=0; for (int i=0;我& lt;m;我+ +){//求方差 dVar +=(x[我]-戴夫)* (x[我]-戴夫); } 返回数学。√dVar/m); }/* * *中位数(int) * @param num:一个整数列表。 * @return:一个整数表示数组的中间的数。 */公共静态int值(int [] num) { 如果(nums.length==0) 返回0; int开始=0; int结束=nums.length-1; int指数=分区(num,开始,结束); 如果(nums.length % 2==0) { 而(指数!=nums.length/2) { 如果(index> nums.length/2) { 指数=分区(num、启动索引1); 其他}{ 指数=分区(num,指数+ 1,); } } 其他}{ 而(指数!=nums.length/2) { 如果(index> nums.length/2) { 指数=分区(num、启动索引1); 其他}{ 指数=分区(num,指数+ 1,); } } } 返回num(指数); } 私有静态int分区(int num [], int, int) { int左=开始; int右=结束; int主=num(左); 而(left java如何计算中位的数