带矢量输入的structfun

时间:2012-07-29 14:03:37

标签: arrays matlab struct histogram

我有一个结构:很多(i).fincomp,其中每一个都是(200x1) 我想为每个'i'创建一个直方图计数: histc(很多(i).fincomp,1:12)< -this works

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

我做错了什么?

我也尝试过使用arrayfun

注意:有些数据是NaN,其余的是数字

由于

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

通过将struct-of-struct转换为矩阵,您可以完全放弃ARRAYFUN循环。 HISTC可以对矩阵进行操作(沿着第一个非单一维度工作,即这里的列):

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

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

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

答案 2 :(得分:1)

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

data = [many.fincomp];

histc(data);