将文本文件导入矩阵形式,索引为字符串?

时间:2014-12-04 10:21:11

标签: matlab matrix

我是Matlab的新手所以请耐心等待。我有一个这种形式的文本文件:

b0002 b0003 999
b0002 b0004 999
b0002 b0261 800

我需要读取此文件并将其转换为矩阵。文本文件中的第一列和第二列类似于矩阵的行和列(索引)。我有另一个文本文件,其中包含' indices'的所有值的列表。所以应该可以预先创建一个空矩阵。

b0002
b0003
b0004
b0005
b0006
b0007
b0008

无论如何使用自定义字符串索引访问矩阵元素(我怀疑它只是想知道)?如果没有,我猜测唯一的方法是为第一行和第一列分配索引字符串值,然后根据第一个文本文件分配第三列值。任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以轻松地将这些字符串转换为数字,然后将其用作索引。对于给定的字符串b0002

s = 'b0002'
str2num(s(2:end); % output = 2

此外,您还可以使用char矩阵执行此操作:

t = ['b0002';'b0003';'b0004']
t =

b0002
b0003
b0004

str2num(t(:,2:end))
ans =

     2
     3
     4

首先,我们使用textscan将数据作为两个字符串和一个浮点数读取(可以使用其他数字格式。我们必须先打开文件进行读取。

fid = fopen('myfile.txt');
A = textscan(fid,'%s%s%f');

textscan返回一个单元格数组,因此我们必须提取三个变量。 xy使用cell2mat转换为单个字符数组(仅当内部所有字符串长度相同时才有效),n是数字列表。

x = cell2mat(A{1});
y = cell2mat(A{2});
n = A{3};

我们现在可以将x和y转换为数字,方法是告诉它将每一行:,但只将第二行转换为行2:end的最后一部分,例如002, 003,而不是{{ 1}}。

b002, b003

索引的轻微问题 - 如果我有矩阵A而且我这样做:

x = str2num(x(:,2:end));
y = str2num(y(:,2:end));

然后它返回四个元素 - A = magic(8); A([1,5],[3,8]) - 而不是两个。但您想要的是矩阵中的位置相当于[1,3],[5,3],[1,8],[5,8]设置为x(1),y(1)等等。为此,我们需要1)计算矩阵的最终大小。 2)使用n(1)计算正确的位置。

sub2ind