Matlab:迭代2d单元格数组并将每一行映射到变量

时间:2016-10-25 10:07:52

标签: matlab loops iteration cell-array

我是Matlab的新手,我希望有一组不同的参数来初始化计算,然后为每个参数绘制结果。我正在尝试以下代码:

params_set = {{0, '-'}, {20, '--'}, {50, '-o-'}};

for params = params_set
    [param, stroke] = deal(params{:})
    % do something - i.e. solve equation and plot result with given stroke settings
end

我希望变量“param”分别为0,然后是20,然后是50,变量“stroke”分别为' - ',' - ',最后是'-o - '。

但我得到以下内容:

param = 

    [0]    '-'


stroke = 

    [0]    '-'


param = 

    [20]    '--'


stroke = 

    [20]    '--'


param = 

    [50]    '-o-'


stroke = 

    [50]    '-o-'

我在那里错过了什么?

1 个答案:

答案 0 :(得分:3)

for loop遍历(列的)单元格,而不是单元格的内容。因此,在每次迭代中,params是一个嵌套的(两级)单元格数组。例如,在第一次迭代中,params{{0, '-'}}

因此,您需要{1}将外部单元格“拆箱”到内部单元格中,然后{:}将内部单元格拆分为其内容(数字和字符串):

[param, stroke] = deal(params{1}{:})

另请注意,在最近的Matlab版本中,您可以删除deal

[param, stroke] = params{1}{:}

尽管把它留在那里可能是个好主意。

所以代码是:

params_set = {{0, '-'}, {20, '--'}, {50, '-o-'}};
for params = params_set
    [param, stroke] = deal(params{1}{:})
    % do something - i.e. solve equation and plot result with given stroke settings
end