Io 如何读取Julia中跳过N行和M列的矩阵(使用windows eol)

Io 如何读取Julia中跳过N行和M列的矩阵(使用windows eol),io,julia,Io,Julia,我需要从Julia中读取一个以800MB矩阵分隔的选项卡,其中前N行和M列是标题,文件有一个windows eol 数据库附带以下matlab指令: A = dlmread('mydatafile.txt','\t',N,M); 似乎dlmread()在julia中已被readdlm()替换,但我不知道如何指定列偏移量或窗口eof 编辑:已更正查看readdlm(通过?readdlm获得)您可以使用关键字 delim指定分隔符 eol指定行尾字符 skipstart指定应忽略多少初始行 总

我需要从Julia中读取一个以800MB矩阵分隔的选项卡,其中前N行和M列是标题,文件有一个windows eol

数据库附带以下matlab指令:

A = dlmread('mydatafile.txt','\t',N,M);
似乎
dlmread()
在julia中已被
readdlm()
替换,但我不知道如何指定列偏移量或窗口eof

编辑:已更正

查看
readdlm
(通过
?readdlm
获得)您可以使用关键字

  • delim
    指定分隔符
  • eol
    指定行尾字符
  • skipstart
    指定应忽略多少初始行
总共

readdlm(“mydatafile.txt”,delim='\t',eol='\n',skipstart=n)


但是我不知道如何忽略列。

经过几次尝试,我能得到的最好结果是加载整个矩阵,包括列标题和行标题,切片以删除标题,并转换为浮动数据:

table = convert(Array{Float64,2},readdlm("myFile.txt",'\t', skipstart=2)[:,4:end]);
在配备873MB(7824x7824)硬盘的i7笔记本电脑上,这需要约51秒的时间


遗憾的是,也不可能跳过初始列,因为我认为这是一种常见情况,顺便说一句,它还可以减少与使用
dlmread()

的matlab脚本之间的差异。什么是C?它应该是M吗?我可能很匆忙,可能OP想要
eol=“\r\n”
这不起作用,因为它是
字符串,而不是
Char
。对于
table=convert(数组{Float64,2},readdlm(“myFile.txt,'\t',skipstart=2)[:,4:end])的较小表,我“管理”但我认为它对于大型表来说不是很有效,因为它首先导入所有内容,然后才进行切片和转换。是的,不会。如果
readdlm
无法为您执行此操作,您当然可以逐行解析文件。我想公关部也会很受欢迎的。@Antonello也许可以看看。它有一个可选参数,用于指定列类型,这样可以加快速度。从内存来看,Julia在读取大型csv文件时的原始速度仍然略低于R,但每天都在提高,我怀疑使用上述软件包您将获得最佳速度。关于忽略列,我认为Julia还没有这种能力。目前,我认为您必须阅读所有列,然后丢弃不需要的列。@ColinTBowers谢谢,但CSV需要知道列的标题或它们的编号(
header=3:end
不起作用)。不过,它会保存到DataFrame,由于某些原因,它需要花费大量的时间,并且生成的df行为异常(“小”文件有~7000 col)。。我也尝试过使用矩阵作为流,但它永远都有库存。Hoverall,使用
readdlm
,切片和转换是更快的方法。