作者hogging (恍晃惶慌)
看板Perl
标题[问题] 大矩阵转置问题
时间Thu Nov 13 01:25:35 2008
各位好,小弟是perl的新手(基本上是写程式的新手 =.=)
我在板上找了很久但是都没有答案只好来发问了
我有一个*.txt的档案,档案大小约580MB
每一列都记录了32988个数字(0~100不等,全部统一用空白键分隔),共9190列
基本上就是有一个9190*32988的数字矩阵,我现在想要改写成32988*9190
以下是我的程式码:
open OUT, "> FILENAME";
for ($i=0;$i<32988;$i++)
{
open IN, "< FILENAME";
while (<IN>)
{
@token=();
@token = split(" ",$_);
print OUT "$token[$i]";
}
close (IN);
}
close (OUT);
我知道这是很笨又很花时间的方法,因为我犯了两个错
1. 不停的开关一个580MB的档案(有试过整个读进来再做转置,结果Out of Memory)
2. 每次都要产生一个阵列(有试过seek和read,但是都没有成功....应该是我写错了)
但是我想了好久都不知道该怎麽加快速度,之前没什麽写程式的经验
现在上面的又要我一个礼拜要搞定,真的不知道该怎麽办....
希望有人愿意伸出援手,谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.81.33
3F:→ giacch:(就我知道的方式)档案输入太慢了... orz 11/15 14:38