如何在迭代期间将迭代编号分配给matlab变量

时间:2018-09-20 20:50:41

标签: matlab dynamic automation

作为分析的中间步骤,我需要使用当前迭代的索引填充一个名为“ 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 :(得分:3)

您可以结合使用composecellstr以获得所需的单元格数组:

>> 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'}

对于R2016b之前的MATLAB版本,您可以使用循环和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'}

答案 1 :(得分:0)

如果我正确理解了这个问题,它将是这样的:

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

答案 2 :(得分:-1)

简而言之,您可以在Matlab中尝试命令“ eval”。 如果您熟悉python,则可以使用Idk,Matlab中的“ eval”基本上与python中的“ exec”相同。

下面是一个非常简单的示例:

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

您将得到f1,f2,f3 ...一直到f10,而它们都是空矩阵。