我试图读取写入文本文件的张量元素。文件的第一行定义张量维度。下一行给出张量值。在Matlab语法中,我能够使用以下代码行来实现这一点,但是我在Julia中编写等效函数时遇到了困难。非常感谢任何帮助。
fid=fopen(fname);
shape = sscanf(fgetl(fid),'%i');
for j = 1:shape(3)
for i = 1:shape(1)
A(i,:,j) = str2num(fgets(fid));
end
end
fclose(fid);
典型文件的第一行如下:
4 4 48
1.00000 0.00000 0.00000 0.00000
0.00000 1.00000 0.00000 0.00000
0.00000 0.00000 1.00000 0.00000
0.00000 0.00000 0.00000 1.00000
-1.00000 0.00000 0.00000 0.00000
0.00000 1.00000 0.00000 0.00000
0.00000 0.00000 -1.00000 0.00000
0.00000 0.00000 0.00000 1.00000
-1.00000 0.00000 0.00000 0.00000
...
答案 0 :(得分:6)
正如@colin在他的评论中所说,这样的文件可以很容易地读到朱莉娅:
julia> data, heading = readdlm("/tmp/data.txt", header=true)
(
9x4 Array{Float64,2}:
1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0
-1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0
0.0 0.0 -1.0 0.0
0.0 0.0 0.0 1.0
-1.0 0.0 0.0 0.0,
1x4 Array{AbstractString,2}:
"4" "4" "48" "")
返回的两个值是Float64s数组,标题行是字符串数组。
有用吗?
答案 1 :(得分:3)
如果您想逐行阅读,可以使用以下内容:
a = open("/path/to/data.txt", "r")
for line in eachline(a)
print(line) ## or whatever else you want to do with the line.
end
close(a)
特别是这样的语法:
LineArray = split(replace(line, "\n", ""), "\t")
可能对你有用。它将(a)删除该行末尾的换行符,然后(b)然后将其拆分为一个索引数组,以便您可以根据它们在行中占据的可预测位置从中拉出元素。
你也可以把:
Header = readline(a);
如果你想专门拔出标题,打开文件后立即,然后运行上面的循环。或者,您可以使用enumerate()
而不是eachline(a)
,然后对枚举的索引执行逻辑(例如,当index = 1时定义标题)。
请注意,这比天轮的答案慢,所以如果你真的需要额外的灵活性,这是值得的。