怎么用Java计算中位数、方差、标准差、众数
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"怎么用Java计算中位数、方差、标准差、众数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Java计算中位数、方差、标准差、众数"
千家信息网最后更新 2025年02月01日怎么用Java计算中位数、方差、标准差、众数
本篇内容主要讲解"怎么用Java计算中位数、方差、标准差、众数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Java计算中位数、方差、标准差、众数"吧!
Java计算中位数、方差、标准差、众数
import java.text.DecimalFormat;import java.util.*;/** * 数学算法(数学算法(方差、标准差、中位数、众数)) * @author * */public class MathAlgorithm { private final static double dmax = 999;// Double.MAX_VALUE;//Double类型的最大值,太大的double值,相乘会达到无穷大 private final static double dmin = Double.MIN_VALUE;// Double类型的最小值 private final static int n = 100;// 假设求取100个doubl数的方差和标准差 public static void main(String[] args) { Random random = new Random(); double[] x = new double[n]; for (int i = 0; i < n; i++) {// 随机生成n个double数 x[i] = Double.valueOf(Math.floor(random.nextDouble() * (dmax - dmin))); System.out.println(x[i]); } // 设置doubl字符串输出格式,不以科学计数法输出 DecimalFormat df = new DecimalFormat("#,##0.00");// 格式化设置 // 计算方差 double dV = getVariance(x); System.out.println("方差=" + df.format(dV)); // 计算标准差 double dS = getStandardDiviation(x); System.out.println("标准差=" + df.format(dS)); int[] intArr={5,10,15,8,6}; System.out.println(Arrays.toString(intArr)+" 中位数:"+median(intArr)); int[] intArr2={5,10,15,8,6,7}; System.out.println(Arrays.toString(intArr2)+" 中位数:"+median(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); float[] arr2 = {0.1f, 1.1f, 2.1f, 3.1f, 4.1f, 5.1f, 6.1f, 7.1f, 8.1f, 9.1f, 10.1f, 1.1f, 1.1f, 2.1f, 2.1f, 3.1f, 4.1f, 5.1f}; List modalNums2 = getModalNums(arr2); System.out.println("众数:"+modalNums2); } /** * 方差s^2=[(x1-x)^2 +...(xn-x)^2]/n * @param x * @return */ public static double getVariance(double[] x) { int m = x.length; double sum = 0; for (int i = 0; i < m; i++) {// 求和 sum += x[i]; } double dAve = sum / m;// 求平均值 double dVar = 0; for (int i = 0; i < m; i++) {// 求方差 dVar += (x[i] - dAve) * (x[i] - dAve); } return dVar / m; } /** * 标准差σ=sqrt(s^2) * @param x * @return */ public static double getStandardDiviation(double[] x) { int m = x.length; double sum = 0; for (int i = 0; i < m; i++) {// 求和 sum += x[i]; } double dAve = sum / m;// 求平均值 double dVar = 0; for (int i = 0; i < m; i++) {// 求方差 dVar += (x[i] - dAve) * (x[i] - dAve); } return Math.sqrt(dVar / m); } /** * 中位数(int) * @param nums: A list of integers. * @return: An integer denotes the middle number of the array. */ public static int median(int []nums){ if(nums.length==0) return 0; int start=0; int end=nums.length-1; int index=partition(nums, start, end); if(nums.length%2==0){ while(index!=nums.length/2-1){ if(index>nums.length/2-1){ index=partition(nums, start, index-1); }else{ index=partition(nums, index+1, end); } } }else{ while(index!=nums.length/2){ if(index>nums.length/2){ index=partition(nums, start, index-1); }else{ index=partition(nums, index+1, end); } } } return nums[index]; } private static int partition(int nums[], int start, int end){ int left=start; int right=end; int pivot=nums[left]; while(left =pivot){ right--; } if(left nums.length/2-1){ index=partition(nums, start, index-1); }else{ index=partition(nums, index+1, end); } } }else{ while(index!=nums.length/2){ if(index>nums.length/2){ index=partition(nums, start, index-1); }else{ index=partition(nums, index+1, end); } } } return nums[index]; } private static int partition(float nums[], int start, int end){ int left=start; int right=end; float pivot=nums[left]; while(left =pivot){ right--; } if(left getModalNums(int[] arr) { int n = arr.length; if (n == 0) { return new ArrayList (); } if (n == 1) { return Arrays.asList(arr[0]); } Map freqMap = new HashMap<>(); for (int i = 0; i < n; i++) { // 统计数组中每个数出现的频率 Integer v = freqMap.get(arr[i]); // v == null 说明 freqMap 中还没有这个 arr[i] 这个键 freqMap.put(arr[i], v == null ? 1 : v + 1); } // 将 freqMap 中所有的键值对(键为数,值为数出现的频率)放入一个 ArrayList List > entries = new ArrayList<>(freqMap.entrySet()); // 对 entries 按出现频率从大到小排序 Collections.sort(entries, new Comparator >() { @Override public int compare(Map.Entry e1, Map.Entry e2) { return e2.getValue() - e1.getValue(); } }); List modalNums = new ArrayList<>(); modalNums.add(entries.get(0).getKey()); // 排序后第一个 entry 的键肯定是一个众数 int size = entries.size(); for (int i = 1; i < size; i++) { // 如果之后的 entry 与第一个 entry 的 value 相等,那么这个 entry 的键也是众数 if (entries.get(i).getValue().equals(entries.get(0).getValue())) { modalNums.add(entries.get(i).getKey()); } else { break; } } return modalNums; } /** * 众数(float) * 众数:在一个数组中出现次数最多的数 * 如果存在多个众数,则一起返回 * @param arr * @return */ public static List getModalNums(float[] arr) { int n = arr.length; if (n == 0) { return new ArrayList (); } if (n == 1) { return Arrays.asList(arr[0]); } Map freqMap = new HashMap<>(); for (int i = 0; i < n; i++) { // 统计数组中每个数出现的频率 Integer v = freqMap.get(arr[i]); // v == null 说明 freqMap 中还没有这个 arr[i] 这个键 freqMap.put(arr[i], v == null ? 1 : v + 1); } // 将 freqMap 中所有的键值对(键为数,值为数出现的频率)放入一个 ArrayList List > entries = new ArrayList<>(freqMap.entrySet()); // 对 entries 按出现频率从大到小排序 Collections.sort(entries, new Comparator >() { @Override public int compare(Map.Entry e1, Map.Entry e2) { return e2.getValue() - e1.getValue(); } }); List modalNums = new ArrayList<>(); modalNums.add(entries.get(0).getKey()); // 排序后第一个 entry 的键肯定是一个众数 int size = entries.size(); for (int i = 1; i < size; i++) { // 如果之后的 entry 与第一个 entry 的 value 相等,那么这个 entry 的键也是众数 if (entries.get(i).getValue().equals(entries.get(0).getValue())) { modalNums.add(entries.get(i).getKey()); } else { break; } } return modalNums; }}
到此,相信大家对"怎么用Java计算中位数、方差、标准差、众数"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
方差
标准
中位数
频率
为数
数组
排序
内容
多个
平均值
数学
格式
次数
算法
类型
学习
统计
肯定
输出
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
串口服务器配置工具
江山如画网络技术
网络安全班会策划案大学
数据库 gbk转utf8
数据库安全有什么作用
郴州市学计算机软件开发学费
计算机网络技术专科薪资待遇
软件开发竞赛平台
快云服务器+管理界面
mybd数据库
达梦数据库迁移工具报6007
简述客户端验证和服务器端验证
软件开发流程意义
龙川软件开发哪家比较专业
喋血复仇被服务器封禁
福建诚信积分管理软件开发系统
如何通过网络安全责任追究
数据库技术二级考什么
彩票筛选软件开发
虚拟服务器端口分配
乌克兰母鸡网站服务器
儿童读物下载软件开发
重庆web前端软件开发定制
南方网络技术有限公司怎么样
智能光网络技术的应用
白水哪个软件开发好
大数据好些还是网络技术好些
网络安全峰会武汉
服务器安全证书未有效
sql数据库没有实例名