0

我有一个结构: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,其余为数字

谢谢

4

3 回答 3

4

你不应该使用structfun,因为many它不是一个结构。使用arrayfuncellfun

于 2012-07-29T14:18:09.007 回答
1

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

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

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

many = struct();
for i=1:10
    many(i).fincomp = randn(200,1);
end
于 2012-07-29T16:25:25.650 回答
1

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

data = [many.fincomp];

histc(data);
于 2012-07-30T19:38:47.197 回答