为什么在将字符插入MATLAB矩阵时会出现此错误?

时间:2011-04-12 16:54:07

标签: matlab matrix character

我正构建一个16x16矩阵,由MATLAB中的字母组成。我试过例如:

for i=1:2:3
    C(i,2)=char('B');    
end

将字母'B'放在矩阵的相应位置。但是,这会在矩阵中提供66的值,而不仅仅是字母'B'。出了什么问题?

3 个答案:

答案 0 :(得分:1)

问题很可能是您已经有一个名为C的变量,其中包含 numeric 数据。当您尝试将字符放入数字矩阵时,该字符将转换为其ASCII值。如果您在运行上述代码之前清除变量C,则应获取C的字符矩阵:

>> clear C
>> for i=1:2:3, C(i,2) = 'B'; end
>> C

C =

 B

 B

请注意,在这种情况下,C是一个3乘2的数组,在第一列的第一列和第二列中包含空字符(ASCII代码0)。如果要将C初始化为16 x 16字符的空字符数组,可以将上述代码中的CLEAR语句替换为:

C = char(zeros(16));

然后运行你的循环来填写你的价值观。另请注意,char('B')是多余的,因为'B'已经是类型字符。

答案 1 :(得分:0)

如果我这样做

for i=1:3
    C(i)=char('A');
end

我得到C=AAA,正如您所期望的那样。我怀疑您获取char的十进制值的原因是因为您可能已将C预先分配为C=zeros(16)。 MATLAB将数组初始化为numeric类型,因此,当您用char替换元素时,它会立即将其转换为数值。

更好的方法是使用cells然后将其转换为矩阵。

C=cell(4,4);%# create an empty 4x4 cell
for i=1:16
    C{i}=char('A');
end

C=


    'A'    'A'    'A'    'A'
    'A'    'A'    'A'    'A'
    'A'    'A'    'A'    'A'
    'A'    'A'    'A'    'A'

现在使用cell2mat将其转换为矩阵:

Cmatrix=cell2mat(C)

Cmatrix=

    AAAA
    AAAA
    AAAA
    AAAA

通常情况下,我不会使用循环,但我不知道您的确切要求,因此我根据您的问题展示了一个示例。

答案 2 :(得分:0)

Matlab将字母'B'存储为整数ASCII码。事实上,char意味着int8。