我正在尝试从 Octave 中的文件读取矩阵,但我找不到解决方案。输入文件是:
4
1 4 2 3
1 4 2 1
4 2 1 4
1 2 1 3
Run Code Online (Sandbox Code Playgroud)
其中 4 是行数和列数。我希望能够将这些信息存储在一个矩阵中,并且能够通过像a(2,3).
您可以使用该功能dlmread():
data = dlmread(file, sep, r0, c0)从使用
sep数据值之间的分隔符的文本文件中读取矩阵数据。如果
sep未定义,则字段之间的分隔符由文件本身确定。给定两个标量参数
r0和c0,它们定义要读取的数据的起始行和列。这些值从零开始索引,因此第一行对应于零索引。
所以你可以简单地使用 one-liner:
data = dlmread('input_file', ' ', 1, 0);
Run Code Online (Sandbox Code Playgroud)
通过使用r0set to调用函数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
Run Code Online (Sandbox Code Playgroud)
然后您可以像使用任何数组一样对结果进行索引
data(2,3)
%// 2
Run Code Online (Sandbox Code Playgroud)