Matlab中每n个值的中位数
Posted
技术标签:
【中文标题】Matlab中每n个值的中位数【英文标题】:Median for every nth values in Matlab 【发布时间】:2017-05-09 15:11:19 【问题描述】:我对 Matlab 没有太多经验。 我有一个包含 17497 个元素的行向量,我想创建一个循环来获取每 120 个值的中位数。
因此,值的中位数为 1:120,然后是下一个值的中位数为 121:240,依此类推。
有人可以帮我吗?
提前致谢, 圣行
【问题讨论】:
【参考方案1】:你可以使用accumarray
N = 17497;
data = rand(N,1);
%# array with 1,1,1,2,2,2 etc
idx = floor((0:N-1).'/120)+1;
%# create median for groups of 120 data points
%# discard the last one if needed as it's <120 points
out = accumarray(idx,data,[],@median);
【讨论】:
【参考方案2】:我将假设您只需忽略行向量中的最后几个元素,这样行就可以平均分为 120 的部分。然后您可以将行向量转换为 120 行矩阵。 median
可以直接对这个矩阵进行操作,返回每一列的中位数。
N = 17497;
A = randn(1,N);
newN = N - mod(N,120);
median(reshape(A(1:newN),120,[]));
【讨论】:
@S.Kupfer:rand
正在生成随机数,rand(2,3)
正在创建大小为 [2,3] 的随机数组。
@Jonas,谢谢!你的两个解决方案都帮了我很多,而且效果很好!以上是关于Matlab中每n个值的中位数的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggpubr包ggsummarystats函数可视化分组箱图(自定义分组颜色)并在X轴标签下方添加分组对应的统计值(样本数N中位数median四分位数的间距iqr统计值的色彩和分组图色匹配