我正构建一个16x16矩阵,由MATLAB中的字母组成。我试过例如:
for i=1:2:3
C(i,2)=char('B');
end
将字母'B'
放在矩阵的相应位置。但是,这会在矩阵中提供66
的值,而不仅仅是字母'B'
。出了什么问题?
答案 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。