精华内容
下载资源
问答
  • 使用Java 8流计算加权平均
    2021-02-12 22:52:32

    您可以为此任务创建自己的收集器:

    static Collector averagingWeighted(ToDoubleFunction valueFunction, ToIntFunction weightFunction) {

    class Box {

    double num = 0;

    long denom = 0;

    }

    return Collector.of(

    Box::new,

    (b, e) -> {

    b.num += valueFunction.applyAsDouble(e) * weightFunction.applyAsInt(e);

    b.denom += weightFunction.applyAsInt(e);

    },

    (b1, b2) -> { b1.num += b2.num; b1.denom += b2.denom; return b1; },

    b -> b.num / b.denom

    );

    }

    此自定义收集器将两个函数作为参数:一个是返回用于给定流元素的值的函数(作为ToDoubleFunction),另一个函数返回权重(作为ToIntFunction).它使用一个辅助本地类,在收集过程中存储分子和分母.每次接受一个条目时,分子会随着值与其权重的乘积而增加,分母会随着权重而增加.然后整理器将两者的分割返回为Double.

    示例用法是:

    Map map = new HashMap<>();

    map.put(0.7, 100);

    map.put(0.5, 200);

    double weightedAverage =

    map.entrySet().stream().collect(averagingWeighted(Map.Entry::getKey, Map.Entry::getValue));

    更多相关内容
  • 我想要得到几个数字的加权平均值。 基本上我有:Price - 134.42Quantity - 15236545可以有少至一两个或多达五十或六十对价格和数量。 我需要弄清楚价格的加权平均值。 基本上,加权平均值应该给对象提供非常小的权重...

    我想要得到几个数字的加权平均值。 基本上我有:

    Price - 134.42

    Quantity - 15236545

    可以有少至一两个或多达五十或六十对价格和数量。 我需要弄清楚价格的加权平均值。 基本上,加权平均值应该给对象提供非常小的权重

    Price - 100000000.00

    Quantity - 3

    以及更多对上面的那对。

    我现在的公式是:

    ((price)(quantity) + (price)(quantity) + ...)/totalQuantity

    到目前为止,我做到了这一点:

    double optimalPrice = 0;

    int totalQuantity = 0;

    double rolling = 0;

    System.out.println(rolling);

    Iterator it = orders.entrySet().iterator();

    while(it.hasNext()) {

    System.out.println("inside");

    Map.Entry order = (Map.Entry)it.next();

    double price = (Double)order.getKey();

    int quantity = (Integer)order.getValue();

    System.out.println(price + " " + quantity);

    rolling += price * quantity;

    totalQuantity += quantity;

    System.out.println(rolling);

    }

    System.out.println(rolling);

    return rolling/totalQuantity;

    问题是我很快就将“滚动”变量最大化了。

    我怎样才能真正得到加权平均值?

    展开全文
  • Java计算加权平均成绩

    千次阅读 2020-07-13 14:42:01
    记一次java计算加权平均成绩 思路很简单,用poi读取单元格的数据,封装到实体类。这里为了计算方便,创建了课程实体类Classes和学生Student实体类。 Classes主要记录:学生班级classes,学生姓名name,课程学分...

    记一次java计算加权平均成绩

    思路很简单,用poi读取单元格的数据,封装到实体类。这里为了计算方便,创建了课程实体类Classes和学生Student实体类。
    Classes主要记录:学生班级classes,学生姓名name,课程学分credit,课程成绩grade,学生姓名name,学号id,由于源文件单元格的格式是文本类型,因此在设置creditgrade时,要进行类型转换。
    Student,主要记录:加权平均成绩grade,学生姓名name,学生班级classes,,学号id

    怎样记录和组织1w+的数据

    采取,读取完一个学生的成绩,就计算一次的策略。把每一行成绩扔进栈中,然后判断,下一行的学生名字与栈顶学生名字是否一致,一致就入栈,不一致就进行计算,把栈内元素清空,存储下一个学生的信息。
    每次计算完毕,把数据封装进Student实体类,扔进List集合。

    数据处理完毕,写数据到磁盘

    这里只需要匹配学生班级,将各班的学生分开,然后写入磁盘。

    目录结构

    目录结构

    代码展示

    Student

    package com.henu.entity;
    
    public class Student {
        private String name;
        private String classes;
        private String id;
        private Double grade;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getClasses() {
            return classes;
        }
    
        public void setClasses(String classes) {
            this.classes = classes;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public Double getGrade() {
            return grade;
        }
    
        public void setGrade(Double grade) {
            this.grade = grade;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", classes='" + classes + '\'' +
                    ", id='" + id + '\'' +
                    ", grade=" + grade +
                    '}';
        }
    }
    
    

    Classes

    package com.henu.entity;
    
    public class Classes {
        private String classes;
        private String id;
        private double credit;
        private double grade;
        private String name;
    
    
        public String getClasses() {
            return classes;
        }
    
        public void setClasses(String classes) {
            this.classes = classes;
        }
    
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public double getCredit() {
            return credit;
        }
    
        public void setCredit(String credit) {
            this.credit = Double.parseDouble(credit);
        }
    
        public double getGrade() {
            return grade;
        }
    
        public void setGrade(String grade) {
            this.grade = Double.parseDouble(grade);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Classes{" +
                    "classes='" + classes + '\'' +
                    ", id='" + id + '\'' +
                    ", credit=" + credit +
                    ", grade=" + grade +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    

    POIUtils

    package com.henu.utils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Stack;
    
    import com.henu.entity.Classes;
    import com.henu.entity.Student;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.usermodel.WorkbookFactory;
    
    public class POIUtils {
        public static final int ST_NAME = 6;
        public static final int ST_ID = 5;
        public static final int ST_CLASS = 4;
        public static final int CL_CREDIT = 9;
        public static final int CL_GRADE = 13;
    
        public static void getExcelAsFile(String file) throws FileNotFoundException, IOException, InvalidFormatException {
            InputStream ins = null;
            Workbook wb = null;
            ins = new FileInputStream(new File(file));
            wb = WorkbookFactory.create(ins);
            ins.close();
            //得到Excel工作表对象
            Sheet sheet = wb.getSheetAt(0);
            //总行数
            int trLength = sheet.getLastRowNum();
            //得到Excel工作表的行
            Row row = sheet.getRow(0);
            //总列数
            int tdLength = row.getLastCellNum();
            Stack<Classes> stack = new Stack<Classes>();
    
            Row rows = null;
            HSSFCell cells = null;
            List<Student> students = new ArrayList<Student>();
            for (int i = 4; i < trLength; i++) {
                rows = sheet.getRow(i);
                Classes classes = new Classes();
                //学生姓名
                cells = (HSSFCell) rows.getCell(ST_NAME);
                classes.setName(cells.getStringCellValue());
                //学生课程学分
                cells = (HSSFCell) rows.getCell(CL_CREDIT);
                classes.setCredit(cells.getStringCellValue());
                //学生该课取得的成绩
                cells = (HSSFCell) rows.getCell(CL_GRADE);
                classes.setGrade(cells.getStringCellValue());
                //学生号
                cells = (HSSFCell) rows.getCell(ST_ID);
                classes.setId(cells.getStringCellValue());
                //学生班级
                cells = (HSSFCell) rows.getCell(ST_CLASS);
                classes.setClasses(cells.getStringCellValue());
    
    
                String str = stack.empty() ? "" : stack.peek().getName();
                if (stack.empty() || str.equals(classes.getName())) {
                    stack.push(classes);
                } else {
                    Student student = new Student();
                    student.setName(stack.peek().getName());
                    student.setClasses(stack.peek().getClasses());
                    student.setId(stack.peek().getId());
                    double credits = 0.0;
                    double grades = 0.0;
                    Classes temp = new Classes();
                    while (!stack.empty()) {
                        temp = stack.pop();
                        credits += temp.getCredit();
                        grades += temp.getGrade() * temp.getCredit();
                    }
                    stack.push(classes);
                    student.setGrade(grades / credits);
                    students.add(student);
                }
            }
            //成绩计算完毕,创建excel存储数据
            CreateExcel(students);
        }
    
        //写数据到excel
        public static void CreateExcel(List<Student> list) {
            String[] str = {"数据科学与大数据技术","数据科学与大数据技术(明德计划)","计算机科学与技术","信息安全","自动化","全部"};
    
            for (String s : str) {
                HSSFWorkbook wb = write(list,s);
                try {
                    FileOutputStream fout = new FileOutputStream("out/"+s+".xls");
                    wb.write(fout);
                    fout.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            System.out.println("All done!");
        }
    
        public static HSSFWorkbook write(List<Student> list, String fileName) {
            HSSFWorkbook write = new HSSFWorkbook();
            HSSFSheet sheet = write.createSheet("new Sheet");
            HSSFRow rowHeader = sheet.createRow(0);
            rowHeader.createCell(0).setCellValue("班级");
            rowHeader.createCell(1).setCellValue("姓名");
            rowHeader.createCell(2).setCellValue("学号");
            rowHeader.createCell(3).setCellValue("成绩");
            int row_id = 1;
    
            for (Student student : list) {
                if (student.getClasses().equals(fileName)||fileName.equals("全部")){
                    HSSFRow row = sheet.createRow(row_id);
                    row_id++;
                    row.createCell(0).setCellValue(student.getClasses());
                    row.createCell(1).setCellValue(student.getName());
                    row.createCell(2).setCellValue(student.getId());
                    row.createCell(3).setCellValue(student.getGrade());
                }
            }
            write.setSheetName(0, fileName);
            return write;
        }
    
    
    
    
        public static void main(String[] args) {
            try {
                getExcelAsFile("in/test.xls");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InvalidFormatException e) {
                e.printStackTrace();
            }
        }
    }
    
    展开全文
  • 我想实现一个通用加权平均函数,它放宽了对值的要求,并且权重属于同一类型 . 即,我想支持以下序列: (value:Float,weight:Int) 和 (value:Int,weight:Float) 参数而不仅仅是: (value:Int,weight:Int) . [见到我...

    我想实现一个通用加权平均函数,它放宽了对值的要求,并且权重属于同一类型 . 即,我想支持以下序列: (value:Float,weight:Int) 和 (value:Int,weight:Float) 参数而不仅仅是: (value:Int,weight:Int) . [见到我之前的question在此期间 . ]

    这就是我目前所拥有的:

    def weightedSum[A: Numeric](weightedValues: GenSeq[(A, A)]): (A, A)

    def weightedAverage[A: Numeric](weightedValues: GenSeq[(A, A)]): A = {

    val (weightSum, weightedValueSum) = weightedSum(weightedValues)

    implicitly[Numeric[A]] match {

    case num: Fractional[A] => ...

    case num: Integral[A] => ...

    case _ => sys.error("Undivisable numeric!")

    }

    }

    如果我喂它,例如:

    val values:Seq[(Float,Float)] = List((1,2f),(1,3f))

    val avg= weightedAverage(values)

    但是,如果我没有从 Int 到 Float 的权重"upcast":

    val values= List((1,2f),(1,3f)) //scalac sees it as Seq[(Int,Float)]

    val avg= weightedAverage(values)

    Scala编译器会告诉我:

    错误:无法找到Numeric类型的证据参数的隐含值[AnyVal] val avg = weightedAverage(values)

    有办法绕过这个吗?

    我尝试编写一个 NumericCombine 类,我用 A 和 B 参数化了"combines"类型"common"类型 AB (例如,组合 Float 和 Int 给你 Float ):

    abstract class NumericCombine[A: Numeric, B: Numeric] {

    type AB <: anyval>

    def fromA(x: A): AB

    def fromB(y: B): AB

    val num: Numeric[AB]

    def plus(x: A, y: B): AB = num.plus(fromA(x), fromB(y))

    def minus(x: A, y: B): AB = num.minus(fromA(x), fromB(y))

    def times(x: A, y: B): AB = num.times(fromA(x), fromB(y))

    }

    我设法使用类型类型模式编写简单的 times 和 plus 函数,但由于 NumericCombine 引入了路径依赖类型 AB ,"composing"这些类型证明比我预期的更难 . 请查看this问题以获取更多信息,并参见here以完整实施 NumericCombine .

    Update

    作为another question(完整的工作演示here)的答案已经获得了一个令人满意的解决方案,但考虑到@ziggystar在discussion中提出的要点,仍然有一些设计改进的空间 .

    展开全文
  • 下面是一个同学的某一科的考试成绩:平时测验 80, 期中 90, 期末 95...那么,加权平均值 =( 80*20% + 90*30% + 95*50% )/(20%+30%+50%)=90.5算术平均值(80 + 90 + 95)/3 = 88.3上面的例子是已知权重的情况。下面的...
  • 加权平均和移动平均

    千次阅读 2021-03-16 13:26:40
    加权平均比如计算4次考试的平均成绩,需要给各次考试的重要性加上权值eg,0.1、0.1、0.2、0.6 分母是11、1、2、6 分母是10移动平均(转载)移动平均法是用一组最近的实际数据值来预测未来一期或几期内的预测数一种常用...
  • Opencv 加权平均法灰度化3. Opencv 最大值法灰度化4. Opencv 平均值法灰度化 1. Opencv 分量法灰度化 分量法的主要思想便是取彩色图像三通道其中的任意一个通道分量,将它作为灰度图像的灰度值,按照现实应用选择一...
  • 本文实例讲述了PHP计算加权平均数的方法。分享给大家供大家参考。具体如下:请输入你的课程的数量:$course_number=$_POST["course_number"];$_SESSION["course_number"]=$course_number;$m=0;echo "";for($i=0;$i...
  • import java.io.Serializable;/*** 实现指数移动平均值计算* 实现中使用了流式风格的builder API* @author liuyazhuang**/public class EWMA implements Serializable {private static final long seria...
  • 使用JAVA实现,采用MVC架构,程序非常Strong,可以直接读取用爬虫从教务爬取的成绩的html文件,并使用jsoup解析,计算GPA和加权平均分后可以导出为xls文件。 附带能爬取教务系统的爬虫CrawlForm,采用cookie模拟登录...
  • 但现在我有一个数据集,我需要计算加权平均值的百分位数,这不是那么简单,我无法弄清楚它是否可能在SPSS中 .我有类似以下的数据Country Region District Units Cost per UnitUSA Central Divisio...
  • java实现数据预测—加权移动平均

    千次阅读 2020-04-26 17:12:13
    * @desc 风险预测--加权移动平均法 */ @Slf4j public class Predicted implements Serializable{ private static final long serialVersionUID = 1L; /*加权移动平均法 * data : 时间序列 [100,20...
  • Java基于opencv实现图像数字识别(三)—灰度化和二值化1、灰度化java灰度化:在RGB模型中,...通常经常使用的是加权平均法来求像素点的灰度值,opencv开发库所采用的一种求灰度值算法以下; :)Gray = 0.072169 * ...
  • VWAP 是一款日内计算, 主要由算法和机构交易者使用, 以便评估一只股票相对其当天的成交量加权平均值的交易分布。
  • 移动平均(转载)

    2021-02-26 20:26:34
    移动平均(英语:Moving Average,MA),又称“移动平均线”简称均线,是技术分析中一种分析时间序列数据的工具。最常见的是利用股价、回报或交易量等变数计算出移动平均。移动平均可抚平短期波动,反映出长期趋势或...
  • import java.io.Serializable;/*** 实现指数移动平均值计算* 实现中使用了流式风格的builder API* @author liuyazhuang**/public class EWMA implements Serializable {private static final long seria...
  • 学生加权平均绩点计算系统

    千次阅读 2019-07-26 15:39:31
    如果单纯计算绩点,这个程序难免小题大做,但为了以后可能扩展成学生成绩管理系统,所以便用了Java面向对象的知识开发的。如有错误,请大佬们指正!!! 输出结果如下图所示: package com.sdnu.studentScore; ...
  • 在本文中,我们从实际的Java软件系统构建了一组加权软件网络,并通过加权k核分解经验地研究了它们的拓扑特性。 首先,我们研究了加权k核结构的静态拓扑特性,发现图核心的小值是许多软件系统共享的一个属性,加权...
  • import java.util.*; class MovingAverage { private int maxSize; private int size; private Queue&lt;Integer&gt; data; /** Initialize your data structure here. */ public MovingAverage(int....
  • 本程序是参考网上相关程序后,制作的一个彩色图转灰度图的灰度转换工具。
  • 上节课留的课堂作业,大概意思是控制台输入zhangsan49lisi60wangwu80end之后求出平均成绩,并且写入文本文件中。有几个不会的地方:1.用list存储,2.字符串中提取出成绩,并分别把名字写入list.name,成绩写入list....
  • 时间序列移动平均法.docx
  • java灰度直方图

    千次阅读 2022-01-30 22:18:12
    import java.util.Scanner; public class day08 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int m = scan.nextInt(); int L = scan....
  • 调度算法先来先服务(FCFS First-Come First-Server)优先权排队(Priority Queuing)循环排队(Round Queuing)加权公平排队(Weighted Fair Queuing)加权轮询加权随机 为什么要用调度算法? 首先要声明这里实现的是应用层...
  • 1 滑动平均的认识  移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素...
  • 函数简介MA(x,n)-移动平均,是最简单的n日内的平均值SMA(x,n,m)-简单移动平均,m为当日的权重,是个0~1之间的值EMA(x,n)-指数移动平均,这个函数以相关周期为权重进行计算DMA(x,m)-动态移动平均,这个函数以动态设定...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,392
精华内容 2,556
关键字:

java 加权平均

java 订阅