标签: median

计算大数据集中值的内存有效方法?

如果一台计算机只能容纳100万个号码,如何找出1亿个号码的中位数?

algorithm complexity-theory computer-science median memory-efficient

7
推荐指数
1
解决办法
4231
查看次数

用Mysql计算中位数

我在计算值列表的中位数时遇到问题,而不是平均值.

我发现这篇文章 用MySQL计算中位数的简单方法

它引用了以下我不理解的查询.

SELECT x.val from data x,data y GROUP BY x.val HAVING SUM(SIGN(1-SIGN(y.val-x.val)))=(COUNT(*)+ 1)/ 2

如果我有时间列并且我想计算中值,那么x和y列是指什么?

mysql statistics median

7
推荐指数
2
解决办法
2万
查看次数

面试中心挑战

问题 M号的中位数被定义为1)如果M是按顺序排序后的奇数中间数2)如果M是中间2个数的平均数(排序后再次)你首先有一个空数字列表.然后,您可以在列表中添加或删除一些数字.对于每个添加或删除操作,输出列表中的数字中位数.

示例:对于一组m = 5的数字,{9,2,8,4,1},中位数是排序集{1,2,4,8,9}中的第三个数字,即4. m = 4,{5,2,10,4},中位数是排序集{2,4,5,10}中第二和第三个元素的平均值,即(4 + 5)/ 2 = 4.5

我的方法 我认为问题可以用这种方式解决.想法是使用先前的中值和指针来找到新的中值而不是在每次添加或删除操作时重新计算.

1)使用多重集合,它始终按顺序保留元素并允许重复.换句话说,以某种方式维护排序列表.

2)如果添加操作

2.1) Insert this element into set and then calculate the median

2.2) if the size of set is 1 then first element will be the median

2.3) if the size of set is even, then

           if new element is larger then prev median, new median will be avg of prev median

               and the next element in set.

           else new median will be avg …
Run Code Online (Sandbox Code Playgroud)

algorithm median

7
推荐指数
1
解决办法
3959
查看次数

找到5个元素的中位数

在最近的微软采访中提出了以下问题

给出一个大小为5的未排序数组.找到中位数需要多少次最小比较?然后他扩大了它的大小n.

根据我的5个元素的解决方案是6

1) use 3 comparisons to arrange elements in array such that a[1]<a[2] , a[4]<a[5] and a[1]<a[4]
a) compare a[1] and a[2] and swap if necessary
b) compare a[4] and a[5] and swap if necessary 
c) compare a[1] and a[4].if a[4] is smaller than a[1] , then swap a[1] wid a[4] and a[2] wid a[5]
2)if a[3]>a[2].if a[2]<a[4] median value = min(a[3],a[4]) else median value=min(a[2],a[5]) 
3)if a[3]<a[2].if a[3]>a[4] median value = min(a[3],a[5]) else median value=min(a[2],a[4]) 
Run Code Online (Sandbox Code Playgroud)

这可以扩展到n个元素.如果不是,除了quickselect之外,我们如何在O(n)中找到n个元素的中位数

arrays algorithm median

7
推荐指数
1
解决办法
2911
查看次数

在MySQL中使用MEDIAN和MAX,MIN和AVG功能

我有以下MySQL查询,它完美地工作:

select 
    count(*) as `# of Data points`, 
    name, 
    max((QNTY_Sell/QNTYDelivered)*1000) as `MAX Thousand Price`,
    min((QNTY_Sell/QNTYDelivered)*1000) as `MIN Thousand Price`,
    avg((QNTY_Sell/QNTYDelivered)*1000) as `MEAN Thousand Price` 
from 
    table_name 
where 
    year(date) >= 2012 and 
    name like "%the_name%" and 
    QNTYDelivered > 0 and 
    QNTY_Sell > 0 
group by name 
order by name;
Run Code Online (Sandbox Code Playgroud)

现在我还想添加一个结果列,它为每行提供MEDIAN数据.在SELECT这个完美的世界中,这将是这样的:

median((QNTY_Sell/QNTYDelivered)*1000) as `MEDIAN Thousand Price`
Run Code Online (Sandbox Code Playgroud)

在Google上搜索MySQL中值函数让我得到了这个答案,如果您对整个表的数据集的中位数感兴趣,这似乎没问题: 使用MySQL计算中值的简单方法

这里的不同之处在于我按name列对表格中的数据进行分组,并希望获得按此列分组的每行数据的中位数.

有谁知道允许我这样做的好玩法?

谢谢!

mysql sql statistics median

7
推荐指数
1
解决办法
8752
查看次数

python/numpy最快的方法,用于对掩码数组进行2d内核排名过滤(和/或选择性排名)

给定2D numpy数组

MyArray = np.array([[ 8.02,  9.54,  0.82,  7.56,  2.26,  9.47],
           [ 2.68,  7.3 ,  2.74,  3.03,  2.25,  8.84],
           [ 2.21,  3.62,  0.55,  2.94,  5.77,  0.21],
           [ 5.78,  5.72,  8.85,  0.24,  5.37,  9.9 ],
           [ 9.1 ,  7.21,  4.14,  9.95,  6.73,  6.08],
           [ 1.8 ,  5.14,  5.02,  6.52,  0.3 ,  6.11]])
Run Code Online (Sandbox Code Playgroud)

和一个掩码阵列

MyMask =  np.array([[ 0.,  0.,  1.,  1.,  0.,  1.],
            [ 1.,  0.,  0.,  0.,  0.,  1.],
            [ 0.,  0.,  0.,  1.,  0.,  0.],
            [ 0.,  1.,  1.,  1., …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy median

7
推荐指数
1
解决办法
1627
查看次数

加快计算每个3元组列的行中位数

如果我有这样的数据框:

df = data.frame(matrix(rnorm(100), 5000, 100))
Run Code Online (Sandbox Code Playgroud)

我可以使用以下函数来逐行获得三项中位数的每个组合:

median_df = t(apply(df, 1, combn, 3, median))
Run Code Online (Sandbox Code Playgroud)

问题是,此功能需要几个小时才能运行.罪魁祸首是中位数(),运行时间比max()或min()大十倍.

如何加快这个功能,可能是通过编写更快版本的median()或以不同方式处理原始数据?

更新:

如果我运行上面的代码但仅针对df [,1:10]:

median_df = t(apply(df[,1:10], 1, combn, 3, median))
Run Code Online (Sandbox Code Playgroud)

需要29秒

fastMedian_df = t(apply(df[,1:10], 1, combn, 3, fastMedian))
Run Code Online (Sandbox Code Playgroud)

从包ccaPP需要6.5秒

max_df = t(apply(df[,1:10], 1, combn, 3, max))
Run Code Online (Sandbox Code Playgroud)

需要2.5秒

所以我们看到fastMedian()有了显着的改进.我们还能做得更好吗?

performance r function median dataframe

7
推荐指数
1
解决办法
197
查看次数

计算中位数按天分组

我有一个脚本,它计算所有表数据的中值:

SELECT avg(t1.price) as median_val FROM (
SELECT @rownum:=@rownum+1 as `row_number`, d.price
  FROM mediana d,  (SELECT @rownum:=0) r
  WHERE 1
  ORDER BY d.price
) as t1, 
(
  SELECT count(*) as total_rows
  FROM mediana d
  WHERE 1
) as t2
AND t1.row_number>=total_rows/2 and t1.row_number<=total_rows/2+1;
Run Code Online (Sandbox Code Playgroud)

现在我需要得到不是所有表值的中值,而是按日期分组.可能吗?http://sqlfiddle.com/#!2/7cf27 - 结果我将得到2013-03-06 - 1.5,2013-03-05 - 3.5.

mysql group-by median

6
推荐指数
1
解决办法
2872
查看次数

Tensorflow中值

如何计算tensorflow中列表的中值?喜欢

node = tf.median(X)
Run Code Online (Sandbox Code Playgroud)

X是占位符
在numpy中,我可以直接使用np.median来获取中值.如何在tensorflow中使用numpy操作?

python numpy median tensorflow

6
推荐指数
3
解决办法
4930
查看次数

R 如何在数据框中获取行的中位数

我想知道是否有任何方法可以计算数据框中行的中位数。我知道函数 rowmeans 存在,但我不相信有行中值函数。我想将结果存储在数据框中的新列中。这是我的例子

我试着在网上看。有一次提到行中位数,但我在 R 中找不到该函数。

 C1<-c(3,2,4,4,5)
   C2<-c(3,7,3,4,5)
   C3<-c(5,4,3,6,3)
   DF <- data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3)

   DF 


  # This is as far as I have gotten, but not streamlined

  MA <- median(C(3, 3, 5). na.rm = T)   # A
  MB <- median(C(2, 7, 4). na.rm = T)   # B
  MC <- median(C(4, 3, 3). na.rm = T)   # C
  MD <- median(C(4, 4, 6). na.rm = T)   # 4
  ME <- median(C(5, 5, 3). na.rm = T)   # E

  CM <- c(MA, MB, MC, …
Run Code Online (Sandbox Code Playgroud)

r median

6
推荐指数
3
解决办法
8213
查看次数