Възможно ли е да се свърже низ с поредица от числа?

Имам низ (напр. 'STA') и искам да направя клетъчен масив, който ще бъде конкатенация на моя sting с числа от 1 до X.

Искам кодът да прави нещо като fore loop тук по-долу:

for i = 1:Num
    a = [{a}  {strcat('STA',num2str(i))}]
end

Искам крайните резултати да са под формата на {‹1xNum cell>}

a = 'STA1' 'STA2' 'STA3' ...

(Искам да задам това на uitable в масива ColumnFormat)

ColumnFormat = {{a},...                 % 1
             'numeric',...              % 2
             'numeric'};                % 3

person NimrodB    schedule 08.03.2013    source източник
comment
и какъв е въпросът ти?   -  person bla    schedule 08.03.2013


Отговори (3)


Можете да го направите с комбинация от NUM2STR (преобразува числа в низове), CELLSTR (преобразува низове в масив от клетки), STRTRIM (премахва излишните интервали ) и STRCAT (комбинира се с друг низ).

Имате нужда от (:), за да сте сигурни, че числовият вектор е колона.

x = 1:Num;
a = strcat( 'STA', strtrim( cellstr( num2str(x(:)) ) ) );

Като алтернатива за матрица с повече измерения имам тази помощна функция:

function c = num2cellstr(xx, varargin)
%Converts matrix of numeric data to cell array of strings

c = cellfun(@(x) num2str(x,varargin{:}), num2cell(xx), 'UniformOutput', false);
person yuk    schedule 08.03.2013

Не съм сигурен дали започвам със STA1, но това трябва да ви даде списък, който започва със STA (от който предполагам, че можете да премахнете първия запис).

N = 5;
[X{1:N+1}] = deal('STA');
a = genvarname(X);
a = a(2:end);
person Kim    schedule 08.03.2013
comment
Интересен подход. Ако имате нужда от числа в последователност, започваща от 1. X=repmat({'STA'},1,N+1); също трябва да работи. - person yuk; 09.03.2013

Опитайте тази:

N = 10;
a = cell(1,N);
for i = 1:N
    a(i) = {['STA',num2str(i)]};
end
person Alfredo Capobianchi    schedule 08.03.2013
comment
Възможно ли е да го има без FOR цикъл? - person NimrodB; 08.03.2013