自然均值算法
在某些数据显示时,由于数据并不是均匀分布的,导致显示太难看;
所以不能使用简单分组=(最大值-最小值)/组;
后来发现这个算法!
自然均值算法:

/// <summary> /// 自然均值算法 !=(最大值-最小值)/分组数 /// </summary> /// <param name="list">排序后的数组</param> /// <param name="numclass">分成几组</param> /// <returns>返回一个数组,长度=分组数-1</returns> /// 用法:若返回[1,2] 则 (<1, 1<=x<2, x>=2) public double[] GetJenksBreaks(double[] list, int numclass) { int numdata = list.Length; double[,] mat1 = new double[numdata + 1, numclass + 1]; double[,] mat2 = new double[numdata + 1, numclass + 1]; double[] st = new double[numdata]; for (int i = 1; i <= numclass; i++) { mat1[1, i] = 1; mat2[1, i] = 0; for (int j = 2; j <= numdata; j++) { mat2[j, i] = Double.MaxValue; } } double v = 0.0; for (int l = 2; l <= numdata; l++) { double s1 = 0.0; double s2 = 0.0; double w = 0.0; for (int m = 1; m <= l; m++) { int i3 = l - m + 1; double val = list[i3 - 1]; s2 += val * val; s1 += val; w++; v = s2 - (s1 * s1) / w; int i4 = i3 - 1; if (i4 != 0) { for (int j = 2; j <= numclass; j++) { if (mat2[l, j] >= (v + mat2[i4, j - 1])) { mat1[l, j] = i3; mat2[l, j] = v + mat2[i4, j - 1]; } } } } mat1[l, 1] = 1; mat2[l, 1] = v; } int k = numdata; int[] kclass = new int[numclass]; kclass[numclass - 1] = list.Length - 1; double[] kvalues = new double[numclass - 1]; for (int j = numclass; j >= 2; j--) { int id = (int)(mat1[k, j]) - 2; kvalues[j - 2] = (double)list[id]; kclass[j - 2] = id; k = (int)mat1[k, j] - 1; } return kvalues; }
树立目标,保持活力,gogogo!
标签:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-07-11 EChart中使用地图方式总结(转载)
2017-07-11 C# 中的委托和事件 --转载