Как назначить номер итерации переменной Matlab во время итерации - PullRequest
0 голосов
/ 20 сентября 2018

В качестве промежуточного шага к анализу мне нужно заполнить переменную с именем 'files' индексом текущей итерации.Пока я делаю это вручную.Я не хотел бы делать это вручную для i=1:1000, поэтому я ищу некоторую автоматизацию здесь, я экспериментировал со многими функциями, но ничего не работает.Пожалуйста, помогите.

Спасибо.

Ниже приводится код, который я запускаю.

clear; clc;
    for i=1:10
    files{i}.data = {
        {
        ['1.csv']
        ['2.csv']
        ['3.csv']
        ['4.csv']
        ['5.csv']
        ['6.csv']
        ['7.csv']
        ['8.csv']
        ['9.csv']
        ['10.csv']
        }};
    end

Required structure of file variable Required structure of data variable


Обновление:

Я использую этот сценарий

clear; clc;
wdir = 'path\';
all_files = 10;
for i=1:10
files{i}.data = {
    {
        cellstr(strcat(wdir,num2str((1:all_files).'),'.csv'))
    }};
end

В этом сценарии все хорошо, кроме функции concat для строк. Он генерирует пространствомежду путем и номером файла для файлов 1..9 и номером файла.10 идеально.Пожалуйста, помогите мне исправить это.Я получаю что-то вроде этого.WHy this whitespace

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Вы можете объединить compose и cellstr для получения желаемого массива ячеек:

>> wdir = 'path\';
>> X = 1:10;
>> formatSpec = "%s%d.csv";
>> cellstr(compose(formatSpec,wdir,X)).'

ans =

  10×1 cell array

    {'path\1.csv' }
    {'path\2.csv' }
    {'path\3.csv' }
    {'path\4.csv' }
    {'path\5.csv' }
    {'path\6.csv' }
    {'path\7.csv' }
    {'path\8.csv' }
    {'path\9.csv' }
    {'path\10.csv'}

Для выпусков MATLAB до R2016b вы можете использоватьцикл и sprintf :

>> wdir = 'path\';
>> X = 1:10;
>> formatSpec = '%s%d.csv';
>> arrayfun(@(x) sprintf(formatSpec,wdir,x),X,'un',0).'

ans =

  10×1 cell array

    {'path\1.csv' }
    {'path\2.csv' }
    {'path\3.csv' }
    {'path\4.csv' }
    {'path\5.csv' }
    {'path\6.csv' }
    {'path\7.csv' }
    {'path\8.csv' }
    {'path\9.csv' }
    {'path\10.csv'}
0 голосов
/ 21 сентября 2018

Короче говоря, вы можете попробовать команду 'eval' в Matlab.ИДК, если вы знакомы с python, в сущности, eval в Matlab делает то же самое, что exec в python.

Очень простой пример ниже:

for i=1:10
   eval(['f',num2str(i),'=[];'])
end

вы будетеполучить f1, f2, f3 ...... вплоть до f10, пока они все являются пустой матрицей.

0 голосов
/ 20 сентября 2018

Если я правильно понимаю вопрос, это будет примерно так:

files_length = 1000;
for id=1:files_length
    files{id}.data = {sprintf('%d.csv', id)};
end
...