MATLAB 结构体数组赋值

Posted

技术标签:

【中文标题】MATLAB 结构体数组赋值【英文标题】:MATLAB Array of structures assignment 【发布时间】:2016-09-12 13:05:57 【问题描述】:

我有一个结构数组。让我们说 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:;

最好的问候,乔纳斯

【问题讨论】:

为什么对你提到的方法不满意?对我来说看起来很整洁。 因为对于我放入结构中的每个值向量(例如 vals),我需要有一行“vals_c = num2cell(vals);” 您拥有的解决方案可能是最好的。我的方法需要结构合并,这可能最终会比这个解决方案更混乱 【参考方案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 支持多个条目,因此您可以填充许多字段。

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

【讨论】:

此方法仅适用于结构的第一个字段。如果s.field1 存在并且values 应该被添加到s 怎么办? 正如我所说,这是这种方法的缺点。您必须创建第二个结构并将它们合并,或者将它们都添加到对 cell2struct 的同一调用中。 对不起,我完全没有看到你答案的最后一行。 有趣的解决方案,但正如您提到的,这是否依赖于初始化结构(Abhinav Ralhan 的解决方案也是如此)。我想我更喜欢“struct('values',num2cell(vals));”解决方案【参考方案2】:

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

要创建一个包含一个字段的新结构:

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

【讨论】:

谢谢。总而言之,我可以使用 field1 = 'values'; 来解决我的问题。 vals = [1:5];结构(field1,num2cell(vals));

以上是关于MATLAB 结构体数组赋值的主要内容,如果未能解决你的问题,请参考以下文章

matlab中怎么定义结构体

matlab中怎么定义结构体

matlab怎样输出结构体数组

matlab中如何看函数结构体中的数据

在matlab中怎么定义结构体?机构体的概念?

怎样创建元素为结构体变量的matlab矩阵