Julia - 使用readdlm指定类型

时间:2016-06-16 09:27:55

标签: file types io julia

我有一个带有小数字的大文本文件,我需要使用Julia导入。 玩具的例子是

7

31 16

90 2 53

我找到了readdlm。我走的时候   a = readdlm(“FileName.txt”) 它的工作原理,但结果数组的类型为Any,结果计算结果非常慢。 我已经尝试过并且没有将类型指定为int或特别是Int16。

我该如何正确地做到这一点? 另外,如果我使用readdlm,我是否必须关闭该文件。

1 个答案:

答案 0 :(得分:7)

如果你指定了类型,你的玩具示例会给你错误,因为那里有一些缺失的值。这些缺失值在Julia中作为字符/字符串处理,因此表格的类型最终为Any,因为readdlm无法确定这些是否为数字/字符值。 Row1只有1个值,而row2有2个,等等,给你缺少值。

如果您的所有数据在文本文件中都很干净,您可以在readdlm中设置表的类型:

int_table = readdlm("FileName2.txt", Int16)
int_table
3x3 Array{Int16,2}:
  7   0   0
 31  16   0
 90   2  53

FileName2.txt的位置:

7   0   0
31  16  0
90  2   53

但是,如果您的数据缺少值,则需要将它们转换为某些数值或使用DataFrames包来处理它们。我假设你想要一个纯整数数组,所以我用0填充值:

any_table = readdlm("FileName.txt")

any_table
3x3 Array{Any,2}:
  7    ""    ""
 31  16      ""
 90   2    53  

# fill missing values with 0
any_table[any_table .== ""] = 0

# convert to integer table
clean_array = Array{Int16}(any_table)

clean_array
3x3 Array{Int16,2}:
  7   0   0
 31  16   0
 90   2  53

Readdlm为您关闭文件,因此您不必担心。