0

我在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'。为什么在矩阵中不是这种情况,我该如何解决这个问题?

4

1 回答 1

4

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));
于 2013-10-15T01:42:29.307 回答