我是Matlab的新手所以请耐心等待。我有一个这种形式的文本文件:
b0002 b0003 999
b0002 b0004 999
b0002 b0261 800
我需要读取此文件并将其转换为矩阵。文本文件中的第一列和第二列类似于矩阵的行和列(索引)。我有另一个文本文件,其中包含' indices'的所有值的列表。所以应该可以预先创建一个空矩阵。
b0002
b0003
b0004
b0005
b0006
b0007
b0008
无论如何使用自定义字符串索引访问矩阵元素(我怀疑它只是想知道)?如果没有,我猜测唯一的方法是为第一行和第一列分配索引字符串值,然后根据第一个文本文件分配第三列值。任何人都可以帮我吗?
答案 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
返回一个单元格数组,因此我们必须提取三个变量。 x
和y
使用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