Matlab:迭代二维元胞数组并将每一行映射到变量

Matlab: iterate 2d cell array and map each row to variables

我是 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-'

我错过了什么?

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

因此您需要 {1} 将外部单元格 "unbox" 放入内部单元格,然后 {:} 将内部单元格拆箱为其内容(数字和字符串):

[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