【问题标题】:MATLAB: length of structure field which is a list of structuresMATLAB:结构字段的长度,它是结构列表
【发布时间】:2011-10-26 19:22:33
【问题描述】:

我发现这个网站对我遇到的很多问题非常有用,这是我在这里发布的第一个问题。我没有通过搜索找到答案,所以如果它存在于其他地方,我深表歉意。

我拥有的是一个结构数组 (MxN),创建为

first = struct('field1',0);
array = repmat(first,[MxN]); %now we have an array of structures

'field1' 我初始化为0,因为对于array(i,j) 中的每个结构,这个字段的长度都是可变的。这意味着我事先不知道它的长度。一旦我的程序完成,array(1,1).field1 是一个结构字段,与 array(1,2) 相同,但列表的长度可能相同也可能不同。

有没有办法可以返回'field1' 中结构列表的长度?

【问题讨论】:

    标签: arrays matlab field structure


    【解决方案1】:

    如果我理解正确,对于数组的每个结构,field1 将包含一个向量,并且您想要获取每个向量的长度。例如

    array = repmat(struct('field1',0), [2 3]);
    for i=1:size(array,1)
        for j=1:size(array,2)
            array(i,j).field1 = rand(randi([1 10]),1);
        end
    end
    

    如果是这种情况,这里有两种获取长度的方法:

    >> len = cellfun(@length, {array.field1})
    len =
         3     8     9     4     1     7
    
    >> len = arrayfun(@(s) length(s.field1), array)
    len =
         3     9     1
         8     4     7
    

    编辑:

    原来,field1 包含另一个嵌套结构,而您想要获取该嵌套结构中数组每个元素的字段数。示例

    array = repmat(struct('field1',0),[1 2]);
    
    array(1,1).field1.a = 1;
    array(1,1).field1.b = 1;
    
    array(1,2).field1.c = 2;
    
    len = arrayfun(@(s) length(fieldnames(s.field1)), array)
    

    【讨论】:

    • 字段 1 不包含向量..它包含可变数量的结构
    • 从您的问题中不清楚您的结构数组中究竟存储了什么,请执行以下操作并将结果粘贴回此处:a1 = array(1,1); a1f1 = a1.field1; whos array a1 a1f1
    • Name Size Bytes Class Attributes a1 1x1 134632 struct alf1 1x1 134456 struct array 10x5 5287864 struct`
    • 尝试以下方法:arrayfun(@(s) length(fieldnames(s.field1)), array)
    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多