将数值数组转换为字符元胞数组并在一行中与字符连接

Convert numeric array to cell array of chars and concat with chars in one line

如何将数值数组转换为字符元胞数组并在一行中与字符连接?

示例

我有一个数值数组:

[1, 5, 12, 17]

我想将其转换为字符元胞数组并与字符 'Sensor ' 连接并得到:

{'Sensor 1', 'Sensor 5', 'Sensor 12', 'Sensor 17'}

有没有办法在一行中做到这一点?

我暂时得到:

nums = [1, 5, 12, 17];

cellfun(@(x) ['Sensor ' num2str(x)], num2cell(nums), 'UniformOutput', 0)

有没有更简单或者更紧凑的方式?

您可以使用 sprintf()arrayfun() 使它稍微整洁一些,但不确定这是否为您节省了很多:

nums = [1, 5, 12, 17];

arrayfun(@(x) {sprintf('Sensor %d',x)}, nums) % Gives a cell array of char array strings

arrayfun(@(x) sprintf("Sensor %d",x), nums)   % Gives an array of string strings (version 2016b onwards)

您还可以在 2016a 以后的 MATLAB 版本中使用 compose()

compose('Sensor %d', nums)  % Char array

compose("Sensor %d", nums)  % String array (version 2017a onwards)

使用字符串的简单替代方法:

>> nums = [1, 5, 12, 17];
>> cellstr("Sensor " + nums) 

ans =

  1×4 cell array

    {'Sensor 1'}    {'Sensor 5'}    {'Sensor 12'}    {'Sensor 17'}

字符串需要 MATLAB R2017a.

另一个只使用函数 "Introduced before R2006a" 的选项是:

A = [1, 5, 12, 17];
B = strcat('Sensor', {' '}, strtrim(cellstr(int2str(A.'))) );

这会生成一个列向量 - 因此您应该根据需要进行转置。