我有一系列结构。让我们说
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{:};
最好的问候,乔纳斯
答案 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
支持多个条目,因此您可以填充多个字段。
最大的缺点是它从头开始创建结构,因此如果需要将此数据添加到现有结构中,则必须进行结构合并。