我试图在Octave中读取文件中的矩阵,但我无法找到解决方案。 输入文件是:
4
1 4 2 3
1 4 2 1
4 2 1 4
1 2 1 3
其中4是行数和列数。我希望能够将这些信息存储在矩阵中,并且能够像a(2,3)
一样调用它们来使用它们。
答案 0 :(得分:4)
您可以使用dlmread()
功能:
data = dlmread(file, sep, r0, c0)
从文本文件中读取矩阵数据,该文件在数据值之间使用分隔符
sep
。如果未定义
sep
,则根据文件本身确定字段之间的分隔符。给定两个标量参数
r0
和c0
,它们定义了要读取的数据的起始行和列。这些值从零开始索引,这样第一行对应的索引为零。
所以你可以简单地使用单行:
data = dlmread('input_file', ' ', 1, 0);
通过调用r0
设置为1
的函数,您实际上正在跳过第一行,其中包含(现在无用的)行数。
答案 1 :(得分:1)
您应该能够使用fscanf
读取所有数据。然后,您可以提取第一个值以获取行数和列数,然后将剩余的数据重新整形为预期的大小。
fid = fopen('data.dat', 'r');
data = fscanf(fid, '%f');
nRows = data(1);
data = reshape(data(2:end), nRows, nRows).';
%// 1 4 2 3
%// 1 4 2 1
%// 4 2 1 4
%// 1 2 1 3
然后,您可以像使用任何数组
一样索引结果data(2,3)
%// 2