首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia -用readdlm指定类型

Julia -用readdlm指定类型
EN

Stack Overflow用户
提问于 2016-06-16 09:27:54
回答 1查看 2K关注 0票数 3

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

7

31 16

90 2 53

我找到雷丁了。当我转到a= readdlm("FileName.txt")时,它可以工作,但是得到的数组类型为Any,由此产生的计算非常慢。我试图将类型指定为int或特别是Int16,但失败了。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 10:13:53

当您指定类型时,玩具示例会给出错误,因为其中有一些缺失的值。这些缺失的值在Julia中作为字符串处理,因此表的类型最终将是Any,因为readdlm无法确定这些值是否为数字/字符值。Row1只有一个值,而row2只有2个等等,给出了丢失的值。

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

代码语言:javascript
复制
int_table = readdlm("FileName2.txt", Int16)
int_table
3x3 Array{Int16,2}:
  7   0   0
 31  16   0
 90   2  53

其中FileName2.txt是:

代码语言:javascript
复制
7   0   0
31  16  0
90  2   53

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

代码语言:javascript
复制
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为您关闭文件,所以您不必担心这个问题。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37855120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档