Matlab向量以逗号分隔列表转换为一行

时间:2016-12-13 19:03:22

标签: matlab

在Matlab中,我经常想要将数值向量中的多个值分配给结构数组的给定字段。

b = 1:3;
x(1).a = b(1);
x(2).a = b(2);
x(3).a = b(3);

似乎应该有一种方法可以在一行中完成这项任务,但我可以提出最好的两行。

c = num2cell(b);
[x.a] = c{:};

有没有办法将数字向量转换为以逗号分隔的列表?我正在寻找类似的东西:

[x.a] = num2csl(b);

请注意,我在这里假设length(x) == length(b)

2 个答案:

答案 0 :(得分:5)

是的,你可以使用struct。如果您提供一个单元格数组作为给定字段名称的值,MATLAB将创建一个与该字段大小相同的struct,并使用单元格数组中的每个元素填充结果数组中的相应struct

x = struct('a', num2cell(b))

一般来说,there is no way to easily return a comma-separated list from a function

答案 1 :(得分:2)

如果x已经存在并且元素数量正确,则只能使用函数来完成此操作:

b = 1:3;

x = repmat(struct, size(b));
[x.a] = num2csl(b);

如果num2csl.m使用特殊输出约定varargout,则此方法有效:

function varargout = num2csl(a)
varargout = num2cell(a);

如果另一方面,x尚不存在,那么这个单行将初始化它,如先前Suever所指出的那样:

x = struct('a', num2cell(b));