首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将mat文件中的变量按名称分组并在结构中收集?

如何将mat文件中的变量按名称分组并在结构中收集?
EN

Stack Overflow用户
提问于 2014-01-17 17:47:00
回答 1查看 68关注 0票数 1

我正在读取一个mat文件,其中包含有计数器的变量,例如a1a2a3bc1c2

我想将数据放入一个字段名为"a“、"b”和"c“的结构中,其中a=[a1;a2;a3]b=bc = [c1; c2]

算法需要能够做到这一点,而不知道每个变量的计数器的最大值是多少。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-17 18:41:59

首先,使用load函数加载mat文件数据,并将其放置在结构中。假设这给了您以下示例数据:

代码语言:javascript
复制
>> s = struct('a1',1:5,'b',[],'a2',1:5,'a3',1:5,'c1',1:3,'c2',3:5)
s = 
    a1: [1 2 3 4 5]
     b: []
    a2: [1 2 3 4 5]
    a3: [1 2 3 4 5]
    c1: [1 2 3]
    c2: [3 4 5]

然后,我们将使用orderfields按字母顺序排列字段,使用fieldnames查找字段名,使用regexprep从字段名中删除所有尾随数字,然后使用unique获得唯一的子字符串

代码语言:javascript
复制
>> s = orderfields(s);
>> [strs, inds] = unique(regexprep(fieldnames(s), '\d*$', ''), 'last')
strs = 
    'a'
    'b'
    'c'

inds =
     3
     4
     6

使用unique返回的索引,我们可以通过执行diff([0; inds])计算每个子字符串出现多少次。然后,我们使用这些计数以及struct2cellmat2cell将结构数据分组到一个单元数组中。

代码语言:javascript
复制
>> data = mat2cell(struct2cell(s), diff([0; inds]))
data = 
    {3x1 cell}
    {1x1 cell}
    {2x1 cell}

注意,我们有一个单元格数组。如果您确信每个子字符串的每一组条目都将正确连接(如我们的示例所示),您可以使用cellfuncell2mat将它们连接起来,如下所示:

代码语言:javascript
复制
>> data = cellfun(@cell2mat, data, 'UniformOutput', false)
data = 
    [3x5 double]
    []
    [2x3 double]

现在我们有了一个矩阵单元阵列,可以使用cell2struct构建一个新的结构。

代码语言:javascript
复制
>> snew = cell2struct(data, strs)
snew = 
    a: [3x5 double]
    b: []
    c: [2x3 double]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21192482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档