我正在尝试在Java中实现Median of Medians这样的方法:
Select(Comparable[] list, int pos, int colSize, int colMed)
Run Code Online (Sandbox Code Playgroud)
list
是一个用于查找指定位置的值列表pos
是指定的位置colSize
是我在第一阶段创建的列的大小colMed
是我用作medX的那些列中的位置我不确定哪种排序算法最适合使用或如何实现这一点.
所以,在回答其他一些问题时,我偶然发现计算中位数为5的必要性.现在,在另一种语言中有一个类似的问题,但是我想要一个Scala算法,我不确定我是否满意我的.
可能重复:
计算存储在Vector-C++中的值的中值?
我需要存储一组值,然后才能计算其中值.
用于存储这些值的c ++中最好的容器是什么,如何找到中位数?
(我可能也希望能够删除特定元素,所以我认为设置可能不是最佳选择...)
我需要在R中找到序数(即有序因子)的中位数.
我在标准库中找不到这样做的方法,所以我提出了以下笨重的解决方案:
ordinal.median <- function(x){
lbls <- levels(x)
new.vars <- c(NA, 1:length(lbls))
new.vars[1] <- median(as.numeric(x))
return(factor(new.vars, labels=lbls, ordered=T)[1])
}
Run Code Online (Sandbox Code Playgroud)
R中的惯用解决方案是什么?
假设在某个时间点,您有一组N
数字并知道中间元素:M
.现在,您将获得一个新值,X
因此您可能需要更新M
.(或者更确切地说,您需要,假设您正在处理的数字都是唯一的.此外,所有样本都是连续接收的,因此并发性没有问题.)
计算新均值很简单:采用旧均值,加X
,乘N
,除N + 1
.(通过检查N元素的平均值是如何定义的,这一点很清楚.目前我并不太担心数字.)
我的问题是:任何人都可以提出更新中位数的创意/小说(或者可能是可证明最优的)方法吗?我将在下面提供一个示例(我自己设计的简单概念),并进行一些分析:
在这个例子中,我将使用a std::forward_list
,因为C++ 11是我最近遇到过的.在不失一般性的情况下,我将假设你以正确的方式进行此操作:维护到目前为止遇到的元素(类型T)的有序列表,std::forward_list<T> sorted;
当 T x;
出现时,只需使用以下方法将其折叠到位:
sorted.merge(std::forward_list<T> {{ x }});
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我很好奇是否有人有更好的(更有效/更优雅)的方法.欢迎Gripes.
所以,X
现在是一部分sorted
,简而言之,这就是我的想法:
auto it = sorted.begin(), itend = sorted.end();
typename std::forward_list<T>::size_type count = std::distance(it, itend);
for (const auto &e : sorted) {
if (it == itend || ++it == itend) {
M = (count % 2) ? e : (e + M) / …
Run Code Online (Sandbox Code Playgroud) 我需要在java中编写一个程序来查找三个或更多整数数组的中位数而不进行排序.我需要一些想法.谢谢
我希望标题不会太混乱......
基本上,我有两个向量,每个向量都是n长度.我想将这两个向量转换为*n矩阵(即包含2个数字的2个向量,每个向量变为2*2矩阵),其中矩阵中的每个位置是两个向量的每个位置的中值.
例如:
a<-as.vector(1,5)
b<-as.vector(1,5)
Run Code Online (Sandbox Code Playgroud)
使用outer()
给我一个2*2矩阵
1 5
1
5
Run Code Online (Sandbox Code Playgroud)
但是,如何使用每个唯一组合之间的中间值填充空矩阵?答案应该是这样的:
1 3
3 5
Run Code Online (Sandbox Code Playgroud) 给定N个8位数字的数组(值0-255)?
如何找到中位数?
我尝试了基数排序和中位数算法的中位数.
如果数字的值在0到255之间,有没有更好的方法?
我有一个10 x 10的值数组,A
.我需要M
所有这些值的中位数.我可以轻松找到沿行或沿列的中位数:
M = median(A,1) %or
M = median(A,2)
Run Code Online (Sandbox Code Playgroud)
但是,M = median(A)
也会沿着行返回中位数.
如何找到所有值的单个中位数?我知道我可以将数组转换为一个非常长的向量,但这似乎令人不快和低效.有更简单的解决方案吗?我希望能够为多维数组做到这一点.
谢谢!
如何median
对已经聚合的数据进行适当的计算?
说我有一个看起来像这样的数据框
> df <- data_frame(name = c("A","B","C","D"), count = c(1,3,5,2), avg = c(100,50,20,10))
> df
# A tibble: 4 × 3
name count avg
<chr> <dbl> <dbl>
1 A 1 100
2 B 3 50
3 C 5 20
4 D 2 10
Run Code Online (Sandbox Code Playgroud)
假设我们对垃圾桶中的东西了解不多,但是假设垃圾桶中的变化很小。据我们所知,我们将像这样排列值:
10 10 20 20 20 20 20 50 50 50 100
Run Code Online (Sandbox Code Playgroud)
在11个值中,中位数将是第6个值,即20
但是,如果我简单地采用median()
,则R会接受4个值:10, 20, 50, 100
> median(df$avg)
[1] 35
Run Code Online (Sandbox Code Playgroud)
这不是我想要的。
如何解决这个问题并“展开”数据集?
median ×10
algorithm ×4
r ×3
sorting ×3
c++ ×2
java ×2
aggregation ×1
arrays ×1
forward-list ×1
matlab ×1
matrix ×1
mean ×1
ordinal ×1
outer-join ×1
r-factor ×1
radix-sort ×1
scala ×1
statistics ×1
vector ×1