Matlab 同时为多个结构字段指定值

Matlab 同时为多个结构字段指定值,matlab,Matlab,我有一个遵循以下模式的matlab结构: S.field1.data1 ... .field1.dataN ... .fieldM.data1 ... .fieldM.dataN 我想同时从所有字段为一个数据字段赋值(比如,data3)。这在语义上类似于: S.*.data3 = value 其中通配符“*”表示结构中的所有字段(field1,…,fieldM)。这是不是在matlab中不用循环就可以实现的?在简单的情况下,可以通过使用st

我有一个遵循以下模式的matlab结构:

S.field1.data1
          ...
 .field1.dataN
   ...
 .fieldM.data1
          ...
 .fieldM.dataN
我想同时从所有字段为一个数据字段赋值(比如,
data3
)。这在语义上类似于:

S.*.data3 = value

其中通配符
“*”
表示结构中的所有字段
(field1,…,fieldM)
。这是不是在matlab中不用循环就可以实现的?

在简单的情况下,可以通过使用
struct2cell()
将结构转换为单元数组来实现。由于您有一个嵌套结构,我认为这在这里不起作用


另一方面,您的数据是这样构造的,有什么原因吗。您的描述给人的印象是,简单的MxN阵列或单元阵列更合适。

基于循环的解决方案可以灵活且易于阅读:

names = strtrim(cellstr( num2str((1:5)','field%d') ));    %'# field1,field2,...
values = num2cell(1:5);                                   %# any values you want

S = struct();
for i=1:numel(names)
    S.(names{i}).data3 = values{i};
end

从第1场开始。。fieldM是具有相同字段的结构数组,为什么不为“field”创建一个结构数组呢?然后,您可以使用deal轻松地将所有“数据”成员设置为特定值

field(1).data1 = 1;
field(1).data2 = 2;
field(2).data1 = 3;
field(2).data2 = 4;

[field.data1] = deal(5);
disp([field.data1]);

示例中的结构非常简化。代码中的结构复杂,无法转换为单元格。即使这是可能的,它也是API的一部分,我不能碰它。是的@Amro,循环是我的计划B。只是我们已经习惯了matlab中循环不好的教条。对于JIT编译,情况可能不是这样,但我想知道是否有一个单行解决方案。@jonnat:矢量化对于繁重的计算最有用,您的是一个简单的赋值语句。因此,即使您提出了一个单行程序,我怀疑它会比这个简单的循环快得多。在更一般的情况下,使用
字段名
可能比手动分配
名称
更好