1
votes

Convertir un tableau numérique en tableau de cellules de caractères et concattre avec des caractères sur une seule ligne

Comment convertir un tableau numérique en tableau de cellules de caractères et concaténer avec des caractères sur une seule ligne?

Exemple :

J'ai un tableau numérique:

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

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

Je veux le convertir en un tableau de cellules de caractères et concattre avec les caractères 'Sensor' et obtenir:

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

Y'a-t-il un moyen de faire cela en une seule ligne?

J'ai pour l'instant:

[1, 5, 12, 17]

Existe-t-il un moyen plus simple ou plus compact manière?


3 commentaires

Je pense que votre solution actuelle est très simple et compacte. Et c'est déjà un one-liner. Alors, pourquoi perdre du temps à économiser peut-être quelques caractères du code source? :)


@HansHirse: Pour une tâche aussi simple, ce n'est pas si compact, il me semble qu'il devrait y avoir une solution plus simple - plus courte.


Une solution plus simple et plus courte peut ne pas être nécessairement plus simple. Le Le code lisible est presque toujours plus important que le code intelligemment écrit, sauf si vous êtes en concurrence dans l'obscurcissement du code.


3 Réponses :


2
votes

Vous pourriez le rendre un peu plus net en utilisant sprintf () et arrayfun () mais pas sûr que cela vous fasse économiser beaucoup:

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

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

Vous pouvez également utiliser compose () dans les versions de MATLAB à partir de 2016a:

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)


1 commentaires

Merci! c'est plus net que ma tentative.



2
votes

Une alternative simple utilisant des chaînes:

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

ans =

  1×4 cell array

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

Les chaînes nécessitent MATLAB R2017a .


0 commentaires

2
votes

Une autre option, qui n'utilise que les fonctions "Introduit avant R2006a", est:

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

Cela produit un vecteur de colonne - vous devez donc transposer si nécessaire.


0 commentaires