Java达成随机抽样
发布时间:2021-11-24 17:40:49 所属栏目:教程 来源:互联网
导读:编程实现对数据记录的随机抽样。给定概率p,依概率p对给定的数据集合进行随机抽样。 比如说现在在一个数组中存放了10000位同学的身高和体重信息,现在需要你对这100位同学以概率p=0.002进行抽样,随机取出这10000位同学中约20位同学的信息。 import Java.io.
编程实现对数据记录的随机抽样。给定概率p,依概率p对给定的数据集合进行随机抽样。 比如说现在在一个数组中存放了10000位同学的身高和体重信息,现在需要你对这100位同学以概率p=0.002进行抽样,随机取出这10000位同学中约20位同学的信息。 import Java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.LineNumberReader; import java.util.Random; import java.util.Scanner; import java.io.InputStreamReader; public class ReadSelectedLine { // 读取制定行 static void readLineVarFile(String fileName, int lineNumber) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader( new FileInputStream(fileName))); String line = reader.readLine(); int num = 0; while (line != null) { if (lineNumber == ++num) { System.out.println("line " + lineNumber + ": " + line); } line = reader.readLine(); } reader.close(); } // 文件内容的总行数。 static int getTotalLines(String fileName) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader( new FileInputStream(fileName))); LineNumberReader reader = new LineNumberReader(in); String s = reader.readLine(); int lines = 0; while (s != null) { lines++; s = reader.readLine(); } reader.close(); in.close(); return lines; } public static void main(String[] args) throws IOException { // 读取文件 String fileName = "D:/student_info.txt"; // 获取文件的内容的总行数 int totalNo = getTotalLines(fileName); System.out.println("There are " + totalNo + " lines in the text!"); System.out.print("input the /"gailv/"(0.0-1.0): "); Scanner scanner = new Scanner(System.in); float gailv = scanner.nextFloat(); int del_num = (int) (totalNo * gailv); for (int i = 0; i < del_num; i++) { Random rand = new Random(); // 指定读取的行号 int lineNumber = (int) (rand.nextDouble() * totalNo); // 读取指定行的内容 readLineVarFile("d:/student_info.txt", lineNumber); } } } (注意:外部文件的文件名与路径) 关于随机抽样算法,我采用的是,先通过读取外部文件(存放需要进行随机抽样信息的文件),然后统计出该文件的行数(前提是需要抽样的样本必须是每一行存放一条对应信息),再通过随机算法产生出需要抽取的样本所对应的行号(通过输入抽样概率,计算出样本),最后输出随机抽样结果。本程序使用循环覆盖所读取文件的内容,可以很好解决内存消耗问题。 ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |