如何在Octave中从文件中读取矩阵?

5

我正在尝试从文件中读取一个矩阵,在Octave中,但我找不到解决方案。

输入文件如下:

4
1 4 2 3
1 4 2 1
4 2 1 4
1 2 1 3

这里的4代表矩阵的行和列数。我希望能够将这些信息存储在一个矩阵中,并且可以通过类似于a(2,3)的方式来访问它的元素。

3个回答

6
您可以使用函数dlmread()

data = dlmread(file, sep, r0, c0)

从使用分隔符sep在数据值之间的文本文件中读取矩阵数据。

如果未定义sep,则字段之间的分隔符是从文件本身确定的。

给定两个标量参数r0c0,它们定义要读取的数据的起始行和列。这些值从零开始索引,因此第一行对应于索引零。

因此,您可以简单地使用一行代码:
data = dlmread('input_file', ' ', 1, 0);

通过将r0设置为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

为什么要以二进制模式打开文件(fopen ... 'rb')? - Andy
@Andy 只是个习惯而已。当使用 fscanf 或相关函数时,无论 fopen 的第二个输入是什么,性能都是相同的。 - Suever
好吧,至少fopen的第二个参数很重要,如果你想写入或追加文件的话;-) - Andy
@Andy 确实!我已经在答案中进行了更新,以避免可能的混淆。 - Suever

1

只需输入load + 空格 + 文件名,如:

load fileName.txt
data = fileName;
data(2,3)



或者

data = load('fileName.txt');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接