Octave: How to turn a vector of integers into a cell array of strings?

我们两清 提交于 2021-01-07 02:39:10

问题


In Octave:

Given a vector

a = 1:3

How to turn vector "a" into a cell array of strings

{'1','2','3'}

(Output of this:)

ans =
{
  [1,1] = 1
  [1,2] = 2
  [1,3] = 3
}

(question end)


Further information: my aim is to use a as the input of strcat('x',a) to get

ans =
{
  [1,1] = x1
  [1,2] = x2
  [1,3] = x3
}

Other solutions how to reach this aim are welcome, but the main question is about getting an array of strings directly from a vector.

This question is a follow-up from cell array, add suffix to every string which could not help me, since strcat('x',{'1','2','3'}) works, but strcat('x', num2cell(1:3)) does not:

>> strcat('x', num2cell(1:3))
warning: implicit conversion from numeric to char
warning: called from
    strcat at line 121 column 8
    C:/Users/USERNAME/AppData/Local/Temp/octave/octave_ENarag.m at line 1 column 1

warning: implicit conversion from numeric to char
warning: called from
    strcat at line 121 column 8
    C:/Users/USERNAME/AppData/Local/Temp/octave/octave_ENarag.m at line 1 column 1

warning: implicit conversion from numeric to char
warning: called from
    strcat at line 121 column 8
    C:/Users/USERNAME/AppData/Local/Temp/octave/octave_ENarag.m at line 1 column 1

ans =
{
  [1,1] = x[special sign "square"]
  [1,2] = x[special sign "square"]
  [1,3] = x[special sign "square"]
}

Also, the Matlab function string(a) according to Matlab: How to convert cell array to string array?, is not yet implemented:

"The 'string' function is not yet implemented in Octave.`


回答1:


You can combine cellstr and int2str:

strcat('x', cellstr(int2str((1:3).')))
or
cellstr(strcat('x', int2str((1:3).')))

You can also combine sprintf and ostrsplit:

ostrsplit(sprintf('x%d ', 1:3), ' ', true)
or
strcat('x', ostrsplit(sprintf('%d ', 1:3), ' ', true))

You can also use num2str instead of int2str.




回答2:


Just to add the other 'obvious' solution

arrayfun( @(x) strcat('x', num2str(x)), a, 'UniformOutput', false )

or equivalently

arrayfun( @(x) sprintf('x%d', x), a, 'UniformOutput', false )


来源:https://stackoverflow.com/questions/65555872/octave-how-to-turn-a-vector-of-integers-into-a-cell-array-of-strings

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!