Преобразовать числовой массив в массив ячеек символов и объединить их с одной строкой - PullRequest
0 голосов
/ 15 мая 2019

Как преобразовать числовой массив в массив ячеек с символами и объединить с символами в одну строку?

Пример :

У меня есть числовой массив:

[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)

Есть ли более простой или более компактный способ?

Ответы [ 3 ]

1 голос
/ 15 мая 2019

Простая альтернатива с использованием строк:

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

ans =

  1×4 cell array

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

Для строк требуется MATLAB R2017a .

1 голос
/ 08 июля 2019

Еще одна опция, которая использует только функции "Представлено до R2006a", это:

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

Это создает вектор столбца - поэтому вы должны транспонировать при необходимости.

1 голос
/ 15 мая 2019

Вы можете сделать его немного аккуратнее, используя 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)

Вы также можете использовать compose() в версиях MATLAB начиная с 2016a:

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

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