我有一个结构:很多(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,其余的是数字
由于
答案 0 :(得分:4)
您不应该使用structfun
,因为many
不是结构。使用arrayfun
或cellfun
。
答案 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);