【问题标题】:structfun with vector input带有向量输入的 structfun
【发布时间】:2012-07-29 14:03:36
【问题描述】:

我有一个结构:many(i).fincomp,每一个都是 (200x1) 我想为每个“i”创建一个直方图计数: histc(many(i).fincomp,1:12)

>>histmany = structfun(@(x)histc(x.fincomp,1:12),many, 'UniformOutput', false); 
Error using structfun 
Inputs to STRUCTFUN must be scalar structures.

我做错了什么?

我也尝试过 arrayfun

注意:部分数据为 NaN,其余为数字

谢谢

【问题讨论】:

  • 哎呀,当我使用 arrayfun 时它显然不起作用,因为我写的是 'false' 而不是 false:histmany = arrayfun(@(x)histc(x.fincomp,1:12),many, 'UniformOutput', false);

标签: arrays matlab struct histogram


【解决方案1】:

您不应使用structfun,因为many 不是结构。使用arrayfuncellfun

【讨论】:

    【解决方案2】:

    您可以完全放弃 ARRAYFUN 循环,将结构数组转换为矩阵。 HISTC 可以对矩阵进行操作(沿第一个非单一维度工作,即此处的列):

    histmany = histc(horzcat(many.fincomp), 1:12);
    

    我用这个简单的例子来测试它:

    many = struct();
    for i=1:10
        many(i).fincomp = randn(200,1);
    end
    

    【讨论】:

      【解决方案3】:

      如果fincomp字段包含相同大小的列向量,则可以将所有字段放入一个矩阵中:

      data = [many.fincomp];
      
      histc(data);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        相关资源
        最近更新 更多