如何按diameter指定区间拆分配对数组、计算weight均值并绘制相关性图
解决方法
你已经生成的逻辑索引subarray1可以直接用于筛选对应的weight值,两个数组长度一致、位置一一对应,同一位置的元素属于同一条配对数据,直接复用索引即可:
% 你原有代码 subarray1 = diameter <10^0.7 & diameter>=10^0.65; meandiameter1 = mean(diameter(subarray1)); % 新增代码计算对应区间的weight均值 meanweight1 = mean(weight(subarray1));
如果需要批量处理所有0.05指数步长的区间,不需要手动逐个定义索引,可以用批量处理的方式简化代码:
- 第一步先定义所有区间的边界:
% 按10的指数步长0.05生成区间边界,这里的上限1.2可以替换为你实际需要的最大指数值 bin_edges = 10.^(0.65:0.05:1.2);
- 第二步给每个diameter分配所属区间编号:
bin_idx = discretize(diameter, bin_edges);
- 第三步批量计算所有区间的直径、重量均值:
% MATLAB R2018a及以上版本可以直接用groupsummary stats = groupsummary([diameter, weight], bin_idx, @mean); % stats每一行对应一个区间,第2列为该区间平均直径,第3列为该区间平均重量
如果使用的MATLAB版本没有groupsummary函数,可以用循环实现:
n_bins = length(bin_edges) - 1; mean_diam = zeros(n_bins, 1); mean_weight = zeros(n_bins, 1); for i = 1:n_bins current_idx = diameter >= bin_edges(i) & diameter < bin_edges(i+1); mean_diam(i) = mean(diameter(current_idx)); mean_weight(i) = mean(weight(current_idx)); end
- 最后绘制相关性图:
scatter(mean_diam, mean_weight) xlabel('平均直径') ylabel('平均重量')
内容的提问来源于stack exchange,提问作者Ari
相关产品推荐
相关产品推荐

