我在matlab中运行以下循环:
对于 k=1:n s(k,:) = [k,'l'] 结束
而不是得到'l',我有108,它对应于它的ascii。
我找到了几个关于如何将数字转换为其 ascii 值的示例。另一方面,我读到'char'可以解决问题。但是,用 char(108) 替换 'l' 仍然返回 108 而不是 char。
我注意到
对于 k=1:n s(k,:) = char(108) 结束
会显示我'l'。为什么在矩阵中不是这种情况,我该如何解决这个问题?
Matlab 使用动态类型,它根据您分配给它的内容推断变量的类型。例如试试这个:
x = [72 69 76 76 79 6]
y = [72 69 76 'L' 79 6]
请注意,x
变成了一个双精度数组,而y
变成了一个字符数组。现在,如果您尝试设置
x(2) = 'A'
数组x
将保持其类型。但是如果你设置
x = [72 'A' 76 76 79 6]
然后 x
将其类型更改为字符数组。如果你想强制一个数组成为一个字符数组,那么你可以简单地调用char()
整个数组。
x = char([72 69 76 76 79 6])
在你的情况下,你可以打电话
s = char(s)
跑完你的循环后。这会将数组重铸为字符而不是双精度数。
另外,请注意您不能在矩阵中混合类型。看起来您正试图将数字放在第一列,将字母放在第二列。这在技术上是不允许的。但是,只要在访问时将第二列中的值转换回字符,就不会出现问题。例如,
for k=1:n
s(k,:) = [k,'l'];
end
first_number = s(1,1);
first_letter = char(1,2);
从本质上讲,您可以将数字存储在一列中,将字母存储在另一列中。每当您从矩阵中访问它时,您只需确保将字母转换为字符。
您也可以考虑使用单元格。例如
n = 26;
s = cell(n,2);
for k=1:n
s{k,1} = k;
s{k,2} = 'l';
end
display(s)
如果您不喜欢 Matlab 显示元胞数组的方式,您仍然可以使用以下符号提取数组片段
% Pull out individual elements
first_number = s{1,1}
first_letter = s{1,2}
% Pull out the columns as matrices
numbers_as_matrix = cell2mat(s(:,1));
letters_as_matrix = cell2mat(s(:,2));