标签: median

ArrayList <Double> to double [],有3亿条目

我正在使用java程序从数据库中获取一些数据.然后我计算一些数字并开始将它们存储在一个数组中.我正在使用的机器有4台RAM.现在,我不知道预先会有多少数字,所以我使用了ArrayList<Double>.但是我知道会有大致的数字300 million numbers.

因此,由于一个double是8个字节,因此该数组将消耗的内存的粗略估计是2.4 gigs(可能更多是因为ArrayList的开销).在此之后,我想计算这个数组的中位数,并使用org.apache.commons.math3.stat.descriptive.rank.Median作为double[]数组输入的库.所以,我需要转换ArrayList<Double>double[].

我确实看到了很多问题,并且他们都提到没有办法绕过整个阵列.现在这很好,但由于它们也将两个对象都保存在内存中,这使我的内存需求高达4.8演出.现在我们遇到了一个问题,因为总RAM可用我们4演出.

首先,我怀疑该程序在某些时候会给我一个正确的内存错误(它当前正在运行)?如果是这样,我如何计算中位数而不必分配双倍内存?我想避免排序数组,因为计算中位数是O(n).

java memory median

4
推荐指数
1
解决办法
1375
查看次数

找到未排序的未排序数组的中位数

有没有办法找到未排序数组的中位数:1-没有排序它.2-不使用选择算法,也不使用中位数的中位数

我发现了许多类似于我的其他问题.但是解决方案,其中大部分,如果不是全部,都讨论了SelectProblem和MedianOfMedians

arrays algorithm median

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

将矩阵的每列中的NA替换为该列的中值

我试图将矩阵的每列中的NA替换为该列的中值,但是当我尝试使用lapply或者sapply我得到错误时; 当我使用for循环时,代码工作,当我一次更改一列时,我做错了什么?

例:

set.seed(1928)
mat <- matrix(rnorm(100*110), ncol = 110)
mat[sample(1:length(mat), 700, replace = FALSE)] <- NA
mat1 <- mat2 <- mat

mat1 <- lapply(mat1,
  function(n) {
     mat1[is.na(mat1[,n]),n] <- median(mat1[,n], na.rm = TRUE)
  }
)   

for (n in 1:ncol(mat2)) {
  mat2[is.na(mat2[,n]),n] <- median(mat2[,n], na.rm = TRUE)
}
Run Code Online (Sandbox Code Playgroud)

r matrix median na imputation

4
推荐指数
1
解决办法
1714
查看次数

Spark Scala:用户定义的计算中位数的聚合函数

我试图找到一种方法来计算给定数据帧的中位数.

val df = sc.parallelize(Seq(("a",1.0),("a",2.0),("a",3.0),("b",6.0), ("b", 8.0))).toDF("col1", "col2")

+----+----+
|col1|col2|
+----+----+
|   a| 1.0|
|   a| 2.0|
|   a| 3.0|
|   b| 6.0|
|   b| 8.0|
+----+----+
Run Code Online (Sandbox Code Playgroud)

现在我想做那样的事情:
df.groupBy("col1").agg(calcmedian("col2"))

结果应如下所示:

+----+------+
|col1|median|
+----+------+
|   a|   2.0|
|   b|   7.0|
+----+------+` 
Run Code Online (Sandbox Code Playgroud)

因此calcmedian()必须是UDAF,但问题是,UDAF的"evaluate"方法只需要一行,但我需要整个表来对值进行排序并返回中位数...

// Once all entries for a group are exhausted, spark will evaluate to get the final result  
def evaluate(buffer: Row) = {...}
Run Code Online (Sandbox Code Playgroud)

这有可能吗?或者还有另一个不错的解决方法吗?我想强调,我知道如何计算"一组"数据集的中位数.但我不想在"foreach"循环中使用此算法,因为这是低效的!

谢谢!


编辑:

这是我到目前为止所尝试的:

object calcMedian extends UserDefinedAggregateFunction {
    // Schema you get as an input 
    def …
Run Code Online (Sandbox Code Playgroud)

scala group-by median user-defined-aggregate apache-spark

4
推荐指数
1
解决办法
2310
查看次数

如何有效地计算运行中位数

我借用了一些代码,试图实现一个函数来计算大量数据的运行中位数。当前的对我来说太慢了(棘手的部分是我需要从正在运行的框中排除所有零)。下面是代码:

from itertools import islice
from collections import deque
from bisect import bisect_left,insort

def median(s):
    sp = [nz for nz in s if nz!=0]
    print sp
    Mnow = len(sp)
    if Mnow == 0:
        return 0
    else:
        return np.median(sp)

def RunningMedian(seq, M):
    seq = iter(seq)
    s = []

    # Set up list s (to be sorted) and load deque with first window of seq
    s = [item for item in islice(seq,M)]
    d = deque(s)

    # Sort it in increasing …
Run Code Online (Sandbox Code Playgroud)

python numpy slice median

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

如何根据面板数据的客户 ID 使用 R 中的中值插补为所有列填充缺失值?

Customer id    Year     a      b
1              2000     10     2
1              2001     5      3
1              2002     NA     4
1              2003     NA     5
2              2000     2      NA
2              2001     NA     4  
2              2002     4      NA
2              2003     8      10
3              2000     9      NA 
3              2001     10     NA
3              2002     11     12
Run Code Online (Sandbox Code Playgroud)

r panel median imputation

4
推荐指数
1
解决办法
1963
查看次数

如何计算Postgres中的中位数

我现在停留在postgres的计算中位数,因为在postgres中没有计算中位数的功能。以下是我的查询,我想获取该查询的中值。请帮我怎么做。

SELECT count, conversion, company_id FROM (SELECT count(ap.id), 
(count(ap.id)/cast(NULLIF(SUM(j.views), 0) as float) * 100) AS conversion, 
j.company_id FROM applications ap RIGHT JOIN jobs j ON ap.job_id = j.id GROUP BY j.company_id order by conversion) with_avg
Run Code Online (Sandbox Code Playgroud)

sql postgresql median

4
推荐指数
1
解决办法
5544
查看次数

在 PHP 中计算数组的中位数

我想弄清楚如何计算一组随机生成的数字的中位数。我已经设置了所有数组,但是我在为计算组合一个函数时遇到了麻烦。

这是我到目前为止:

//array 
$lessFifty = array();
$moreFifty = array();

//number generation
for ($i = 0; $i<=30; $i++) {
      $number = rand(0, 100);

//Sorting <50>      
if ($number < 50 ) {
    $lessFifty[] = $number;
} else {
    $moreFifty[] = $number; 
   } 
}
 echo print_r($lessFifty); 
 echo "<br>" ;
 echo print_r($moreFifty);

   //Average
echo "<p> Average of values less than fifty: </p>";
    print   array_sum($lessFifty) / count($lessFifty) ;
echo "<p> Average of values greater than fifty: </p>" ;  
    print   array_sum($moreFifty) / count($moreFifty) ;

//Median
$func …
Run Code Online (Sandbox Code Playgroud)

php arrays median

4
推荐指数
1
解决办法
9969
查看次数

如何在 Pandas 数据框中用中值替换离群值?

这是我的数据框:

cars_num_df.head(10)

    mpg cylinders   displacement    horsepower  weight  acceleration    age
0   18.0    8          307.0          130.0     3504.0     12.0         13
1   15.0    8          350.0          165.0     3693.0     11.5         13
2   18.0    8          318.0          150.0     3436.0     11.0         13
3   16.0    8          304.0          150.0     3433.0     12.0         13
4   17.0    8          302.0          140.0     3449.0     10.5         13
5   15.0    8          429.0          198.0     4341.0     10.0         13
6   14.0    8          454.0          220.0     4354.0      9.0         13
7   14.0    8          440.0          215.0     4312.0      8.5         13
8   14.0    8          455.0          225.0     4425.0     10.0 …
Run Code Online (Sandbox Code Playgroud)

python median outliers pandas

4
推荐指数
1
解决办法
8029
查看次数

如何在 PrestoSQL 中计算中位数?

Presto SQL 中似乎没有为此目的的本机函数。你知道有什么方法可以有效地聚合一个组并返回它的中位数吗?

sql group-by aggregate-functions median presto

4
推荐指数
1
解决办法
5601
查看次数