从结构创建直方图
Create histogram from struct
我在 Octave (v5.1.0) 中有一个结构,如下所示:
>> cal_data
cal_data =
scalar structure containing the fields:
OG_0100 =
0.045260 -62.422000 0.044310 -60.768600
0.045000 -61.576600 0.044620 -61.303400
OG_0101 =
0.044950 -61.316900 0.044110 -59.609500
0.045150 -62.235500 0.044380 -61.260800
OG_0102 =
0.045160 -61.609900 0.044550 -61.759800
0.044950 -61.725800 0.044480 -61.062300
等...字段的名称递增到 OG_0280
。每个字段都是相同的,由一个 2x4 的双精度数组组成。
我想为结构中所有字段的 8 个值中的每一个创建一个直方图,但遇到了问题。
我尝试了以下方法,但无济于事:
>> hist([cal_data])
error: hist: Y must be real-valued
error: called from
hist at line 90 column 5
因为每个结构元素的大小都相同,所以将它们存储为单个 3D 数组会更高效、更灵活。此代码将您当前的结构转换为这样的数组:
cal_data.OG_0100 = [
0.045260 -62.422000 0.044310 -60.768600
0.045000 -61.576600 0.044620 -61.303400];
cal_data.OG_0101 = [
0.044950 -61.316900 0.044110 -59.609500
0.045150 -62.235500 0.044380 -61.260800];
cal_data.OG_0102 = [
0.045160 -61.609900 0.044550 -61.759800
0.044950 -61.725800 0.044480 -61.062300];
data = struct2cell(cal_data);
data = reshape(data,1,1,[]);
data = cell2mat(data);
data(:,:,1)
等同于 cal_data.OG_0100
。等等
然后,您可以通过首先整形为二维矩阵来为每个值制作直方图,其中每一列都是一个值,每一行都是一个观察值(这需要转置)。但是,由于每个值的范围非常不同,单个直方图可能并不理想。简单地绘制 8 个单独的直方图可能会更好。
data = reshape(data,[],size(data,3)).';
hist(data)
我在 Octave (v5.1.0) 中有一个结构,如下所示:
>> cal_data
cal_data =
scalar structure containing the fields:
OG_0100 =
0.045260 -62.422000 0.044310 -60.768600
0.045000 -61.576600 0.044620 -61.303400
OG_0101 =
0.044950 -61.316900 0.044110 -59.609500
0.045150 -62.235500 0.044380 -61.260800
OG_0102 =
0.045160 -61.609900 0.044550 -61.759800
0.044950 -61.725800 0.044480 -61.062300
等...字段的名称递增到 OG_0280
。每个字段都是相同的,由一个 2x4 的双精度数组组成。
我想为结构中所有字段的 8 个值中的每一个创建一个直方图,但遇到了问题。
我尝试了以下方法,但无济于事:
>> hist([cal_data])
error: hist: Y must be real-valued
error: called from
hist at line 90 column 5
因为每个结构元素的大小都相同,所以将它们存储为单个 3D 数组会更高效、更灵活。此代码将您当前的结构转换为这样的数组:
cal_data.OG_0100 = [
0.045260 -62.422000 0.044310 -60.768600
0.045000 -61.576600 0.044620 -61.303400];
cal_data.OG_0101 = [
0.044950 -61.316900 0.044110 -59.609500
0.045150 -62.235500 0.044380 -61.260800];
cal_data.OG_0102 = [
0.045160 -61.609900 0.044550 -61.759800
0.044950 -61.725800 0.044480 -61.062300];
data = struct2cell(cal_data);
data = reshape(data,1,1,[]);
data = cell2mat(data);
data(:,:,1)
等同于 cal_data.OG_0100
。等等
然后,您可以通过首先整形为二维矩阵来为每个值制作直方图,其中每一列都是一个值,每一行都是一个观察值(这需要转置)。但是,由于每个值的范围非常不同,单个直方图可能并不理想。简单地绘制 8 个单独的直方图可能会更好。
data = reshape(data,[],size(data,3)).';
hist(data)