如何从八度音阶的文件中读取矩阵?

Kat*_*lyn 5 octave

我正在尝试从 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).

jad*_*hem 6

您可以使用该功能dlmread()

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

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

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

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

所以你可以简单地使用 one-liner:

data = dlmread('input_file', ' ', 1, 0);
Run Code Online (Sandbox Code Playgroud)

通过使用r0set to调用函数1,您可以有效地跳过第一行,其中包含(现在无用的)行数。


Sue*_*ver 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)