您的位置:程序门 -> java -> j2se / 基础类



求矩阵文件的行转列


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求矩阵文件的行转列[已结贴,结贴人:songduanlei]
发表于:2008-01-21 12:14:35 楼主
我有一个矩阵文件特别大,想进行乘积的运算,大概是10000*10000,
是两个文件的矩阵相乘,因为矩阵乘积的算法是第一个矩阵的行乘以第二个矩阵的列,
但是如果每次都读取第二个矩阵的列比较麻烦,所先把一个矩阵进行转置,然后进行存储。
哪位高人能帮我解决一下,不对感激。
发表于:2008-01-21 13:09:581楼 得分:0
这么大的运算,建议用fortran
发表于:2008-01-21 14:20:572楼 得分:0
每个矩阵列是用一个空格分开来的,还是其他的分隔符?

矩阵中的数据是整数的还是小数的?

很多的细节都没有描述清楚。
发表于:2008-01-21 15:02:273楼 得分:20
我按我的理解写了个简单点的代码

java code
import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.file; import java.io.filereader; import java.io.filewriter; import java.io.ioexception; public class test { public static void main(string[] args) { file src = new file("f:/1.txt"); file dist = new file("f:/1_.txt"); transpose(src, dist, " "); } /** * 原文件内容: * 1.1 1.2 1.3 1.4 1.5 * 2.1 2.2 2.3 2.4 2.5 * 3.1 3.2 3.3 3.4 3.5 * 4.1 4.2 4.3 4.4 4.5 * 5.1 5.2 5.3 5.4 5.5 * 6.1 6.2 6.3 6.4 6.5 * 转置后: * 1.1 2.1 3.1 4.1 5.1 6.1 * 1.2 2.2 3.2 4.2 5.2 6.2 * 1.3 2.3 3.3 4.3 5.3 6.3 * 1.4 2.4 3.4 4.4 5.4 6.4 * 1.5 2.5 3.5 4.5 5.5 6.5 * @param src 源文件 * @param dist 新文件 * @param separator 列分隔符 * @since 2008-1-21 */ private static void transpose(file src, file dist, string separator) { bufferedreader br = null; bufferedwriter bw = null; int row = 0; try { // 检查矩阵的行数 br = new bufferedreader(new filereader(src)); string str; while((str = br.readline()) != null) { row++; } br.close(); // 读成取矩阵文件 br = new bufferedreader(new filereader(src)); string[][] matrix = new string[row][]; row = 0; while((str = br.readline()) != null) { matrix[row++] = str.split(separator); } br.close(); // 重新写入文件 bw = new bufferedwriter(new filewriter(dist)); forint j = 0; j < matrix[0].length; j++) { forint i = 0; i < matrix.length; i++) { if(i > 0) { // 写入分隔符 bw.write(separator); } bw.write(matrix[i][j]); } bw.newline(); } bw.close(); }catch(ioexception e) { e.printstacktrace(); } } }
发表于:2008-01-21 15:17:234楼 得分:0
对于10000*10000的处理太大了,堆内存会溢出,我测试5000*5000就溢出了。
发表于:2008-01-22 00:01:595楼 得分:0
这样要把所有的文件都放入内存,我不想这样,我想通过一行行的读取文件和写入文件来实现转置。
这样写是肯定实现不了的,不过还是要谢谢你,给你散分。


快速检索

最新资讯
热门点击