MATLAB数组结构赋值

时间:2016-09-12 13:05:58

标签: arrays matlab structure

我有一系列结构。让我们说     s(1).value,...,s(5).value。 我有一个值向量,让我们说vals = [1 2 3 4 5],我想分配给结构数组。所以用伪代码写的我想要:s(:).value = vals

如下所示,有一个已知的解决方案。但是真的不可能像在伪代码中那样在1行中进行这个赋值吗?

% Vector of values
vals = [1 2 3 4 5];
n = length(vals);

% Initialize struct
s(n).values = 0;

% Put vals into my struct.values
[s(1:n).values] = ???

% Known solution that i am not satisfied with:
vals_c = num2cell(vals);
[s(1:n).values] = vals_c{:};

最好的问候,乔纳斯

2 个答案:

答案 0 :(得分:1)

最近经历了同样的阶段,我以为我会回答这个问题。

使用一个字段创建新结构:

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)

创建一个包含多个字段的非标量结构:

field1 = 'f1';  value1 = zeros(1,10);
field2 = 'f2';  value2 = {'a', 'b'};
field3 = 'f3';  value3 = {pi, pi.^2};
field4 = 'f4';  value4 = {'fourth'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)

另外,正如我一直建议的那样,仔细阅读文档几次是非常必要和有用的,所以你去了。 https://in.mathworks.com/help/matlab/ref/struct.html

答案 1 :(得分:1)

可以使用cell2struct与num2cell一起在一行中执行此操作。

% Vector of values
vals = [1 2 3 4 5];
n = length(vals);


% Put vals into my struct.values
s = cell2struct(num2cell(vals), 'values', 1)

% transpose if orientation is important
s  = s.'; 

它不漂亮,但它确实在一行中完成。 cell2struct支持多个条目,因此您可以填充多个字段。

最大的缺点是它从头开始创建结构,因此如果需要将此数据添加到现有结构中,则必须进行结构合并。