我被问过这个问题一次,仍然无法弄清楚:
你有一个N
整数数组,其中N
很大,比如十亿.您想要计算此数组的中值.假设您有m+1
机器(m
工人,一个主人)来分配作业.你会怎么做呢?
由于中位数是一个非线性算子,你不能只找到每台机器的中位数,然后取这些值的中位数.
我想知道使用这个中值函数的原因是什么,而不仅仅是计算min + (max - min) / 2
:
// used by the random number generator
private static final double M_E12 = 162754.79141900392083592475;
/**
* Return an estimate of median of n values distributed in [min,max)
* @param min the minimum value
* @param max the maximum value
* @param n
* @return an estimate of median of n values distributed in [min,max)
**/
private static double median(double min, double max, int n)
{
// get random value in [0.0, …
Run Code Online (Sandbox Code Playgroud) 我有一个大矩阵,像这样一个:
NCols=100
NRows=100
myMat<-matrix(runif(NCols*NRows), ncol=NCols)
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是找到哪个行和列具有与矩阵的所有值的均值或中值最接近的值,计算方法如下mean(myMat)
.
我怎么能这样做R
?
我有一个未排序的数组,我需要中位数的位置。我知道有几种算法可以在 O(n) 中计算给定数组的中位数,但所有这些算法都包括对数组的某种重新排序,例如中位数的中位数和随机选择。
我对中位数本身不感兴趣,只对它在数组中的位置感兴趣。
有什么办法可以在 O(n) 内做到这一点吗?跟踪所有交换会产生巨大的开销,因此我正在寻找另一种解决方案。
我正在使用SQL Server 2008
如果我有这样的表:
Code Value
-----------------------
4 240
4 299
4 210
2 NULL
2 3
6 30
6 80
6 10
4 240
2 30
Run Code Online (Sandbox Code Playgroud)
如何通过Code列找到中位数AND组?要获得这样的结果集:
Code Median
-----------------------
4 240
2 16.5
6 30
Run Code Online (Sandbox Code Playgroud)
我真的很喜欢这个中位数的解决方案,但不幸的是它不包括Group By:https: //stackoverflow.com/a/2026609/106227
以下函数应该计算a的中位数std::vector<double>
.
double vecMed(vector<double>& vec) {
vector<double> copyVec = vec;
sort(copyVec.begin(), copyVec.end());
if( copyVec.size()%2 == 0)
return (copyVec[floor(static_cast<double>(copyVec.size())/2.0)] + copyVec[ceil(static_cast<double>(copyVec.size())/2.0)]) / 2.0;
else
return copyVec[copyVec.size()/2];
}
Run Code Online (Sandbox Code Playgroud)
我在这条线上遇到了一个段错误,有时候:
return (copyVec[floor(static_cast<double>(copyVec.size())/2.0)] + copyVec[ceil(static_cast<double>(copyVec.size())/2.0)]) / 2.0;
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到这个功能的问题?
段错误可能是由于我不知道的其他地方的内存损坏,但我想确保在我探索这种可能性之前,我没有在上面的代码中做出一个微妙或粗心的错误.
GDB说:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000428ab6 in vecMed (this=0x7fffffffd1b0, vec=...) at ../globals.cpp:834
834 return (copyVec[floor(static_cast<double>(copyVec.size())/2.0)] + copyVec[ceil(static_cast<double>(copyVec.size())/2.0)]) / 2.0;
(gdb) bt
#0 0x0000000000428ab6 in vecMed (this=0x7fffffffd1b0, vec=...) at ../globals.cpp:834
Run Code Online (Sandbox Code Playgroud) 我有一个按日期和时间间隔列出的整数计数观察数据框。我想使用 dplyr 包按日期查找这些观察值的中位数。我已经正确设置了日期列的格式,并使用了 group_by ,如下所示:
data.bydate <- group_by(data.raw, date)
Run Code Online (Sandbox Code Playgroud)
当我使用 summarise() 查找每个日期组的中位数时,我得到的只是一堆零。数据中存在 NA,因此我已使用 na.rm = TRUE 删除它们。
data.median <- summarise(data.bydate, median = median(count, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)
我还应该这样做吗?
我有一个 HTML 页面,其中包含可供您选择的单选按钮。一是年龄范围,二是薪资范围。这些是由 php 文件处理的,我想做的是能够打印
\n\n关于用户如何与他/她的年龄中位数进行比较的声明\n
\n到目前为止,我只打印用户的年龄范围和工资范围。我不知道如何打印其他的。
<table>\n <tr>\n <td>\n Age Range</td>\n <td colspan="2">\n Salary Range</td>\n </tr>\n <tr>\n <td>\n <input id="Radio1" checked="checked" name="R1" type="radio" value="V1" />15 to \n 24 Years</td>\n <td>\n <input id="Radio7" checked="checked" name="R7" type="radio" value="V1" />$15,000 \n to $24,999</td>\n <td>\n <input id="Radio13" name="R7" type="radio" value="V1" />$75,000 \n to $84,999</td>\n </tr>\n <tr>\n <td>\n <input id="Radio2" name="R1" type="radio" value="V1" />25 to \n 34 Years</td>\n <td>\n <input id="Radio8" name="R7" type="radio" …
Run Code Online (Sandbox Code Playgroud)df
我正在尝试使用rowMedians
from包计算数据框的行中位数matrixStats
。
Abundance Sample1 Sample2 Sample3 Sample4 Sample5 Sample6 Sample7
Species1 2 4 0 0 0 6 0
Species2 3 5 6 4 0 0 0
Species3 3 7 2 5 8 0 0
Species4 0 0 3 8 0 0 8
Species5 7 5 6 0 0 4 4
Species6 4 2 3 0 0 2 1
Run Code Online (Sandbox Code Playgroud)
我想计算每行的中位数并将它们附加到新列中。我收到一个错误
参数“x”必须是向量或矩阵
所以我尝试将我的转换df
为矩阵。该str
函数显示该物种的每个值都是数字,所以我尝试:
library(matrixStats)
matrix(df, rownames.force = NA)
rowMedians(df)
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到同样的错误。任何帮助表示赞赏。
我有一个熊猫系列,我想以三种不同的方式组合起来。该系列如下:
import pandas as pd
timestamps = [1,1,1,2,3,3,3,4]
quantities = [10,0,2,6,7,2,8,0]
series = pd.Series(quantities, index=timestamps)
Run Code Online (Sandbox Code Playgroud)
显然,时间戳有3 values of 1
、1 value of 2
、3 values of 3
和1 value of 1
。我想生成以下系列:
1. 重复索引值的总和:
pd.Series([12,6,17,0], index=[1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
2. 重复索引值的中位数:
pd.Series([2,6,7,0], index=[1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
2、重复索引值的数量:
pd.Series([3,1,3,1], index=[1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
在numpy
我将使用一种unique_elements_to_indices
方法来实现这一点:
from typing import Dict
import numpy as np
def unique_elements_to_indices(array: np.array) -> Dict:
mapping = {}
for unique_element in np.unique(array):
mapping[unique_element] = np.where(array == unique_element)[0]
return mapping
Run Code Online (Sandbox Code Playgroud)
...然后我将循环遍历 …