以下是 athena 表的架构
我希望通过 standard_lab_parameter_name 和单位计算“parameter_value”组的中位数。为此,我遵循了链接: https: //docs.aws.amazon.com/redshift/latest/dg/r_MEDIAN.html 但是在运行查询时
select median(parameter_value) from table_name group by standard_lab_parameter_name, units
Run Code Online (Sandbox Code Playgroud)
它抛出错误
SYNTAX_ERROR: line 1:8: Function median not registered
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?或者如果有一些替代查询会很棒
我试图s用列A1和计算数据集的中值向量B1.中值向量是来自两个列的每个观察的中值.
我试图这样做但它不起作用.
median(s[c("A1","B1")])
Run Code Online (Sandbox Code Playgroud)
还有另一种方法吗?
我有一个n个成对不同元素的数组和一个数字k,其中1 <= k <= n.
现在我正在寻找一种算法,计算k数字与数字数组的中位数的最小绝对差值.我需要线性复杂度(O(n)).
我的方法:
我找到了中位数:
之后:
我不知道我的解决方案是否存在O(n),我是否对这个想法是对的.有人可以验证吗?有人能告诉我如何在O(n)中解决它吗?
如果你有一个AVL树,从中获得中位数的最佳方法是什么?中位数将被定义为排序列表中具有索引ceil(n/2)(索引以1开头)的元素.
所以,如果列表是
1 3 5 7 8
Run Code Online (Sandbox Code Playgroud)
中位数是5.如果列表是
1 3 5 7 8 10
中位数是5.
如果你可以扩充树,我认为最好让每个节点知道子树的大小(节点数),(即1 + left.size + right.size).使用这个,我能想到的最好方法是中位数搜索O(lg n)时间,因为你可以通过比较索引进行遍历.
有没有更好的办法?
我正在使用Python测量数据样本的中位数和百分位数.
import numpy as np
xmedian=np.median(data)
x25=np.percentile(data, 25)
x75=np.percentile(data, 75)
Run Code Online (Sandbox Code Playgroud)
np.sort()在测量中位数之前,我是否必须在数据上使用该功能?
是否有可能在没有明确删除NaN的情况下计算列表的中位数,而是忽略它们?
我想median([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])成为2,而不是NaN.
我试图计算R中各列的中位数,然后用列中的每个值减去中值.我在这里遇到的问题是我在我的专栏中有N/A,我不想删除但只返回它们而不减去中位数.例如
ID <- c("A","B","C","D","E")
Point_A <- c(1, NA, 3, NA, 5)
Point_B <- c(NA, NA, 1, 3, 2)
df <- data.frame(ID,Point_A ,Point_B)
Run Code Online (Sandbox Code Playgroud)
是否可以计算具有N/A的柱的中值?我的结果是
+----+---------+---------+
| ID | Point_A | Point_B |
+----+---------+---------+
| A | -2 | NA |
| B | NA | NA |
| C | 0 | -1 |
| D | NA | 1 |
| E | 2 | 0 |
+----+---------+---------+
Run Code Online (Sandbox Code Playgroud) 我试图从带有日期的GPS高程位移的散点图中滤除一些异常值
我正在尝试使用df.rolling来计算每个窗口的中位数和标准偏差,如果它大于3个标准差,则删除该点.
但是,我无法找到一种方法来遍历列并比较滚动计算的中值.
这是我到目前为止的代码
import pandas as pd
import numpy as np
def median_filter(df, window):
cnt = 0
median = df['b'].rolling(window).median()
std = df['b'].rolling(window).std()
for row in df.b:
#compare each value to its median
df = pd.DataFrame(np.random.randint(0,100,size=(100,2)), columns = ['a', 'b'])
median_filter(df, 10)
Run Code Online (Sandbox Code Playgroud)
如何循环并比较每个点并将其删除?
我创建了一个名为Collect的方法,该方法将一堆值添加到向量中(如下所示)
void Median::Collect(double datum)
{
myVector.push_back(datum);
}
Run Code Online (Sandbox Code Playgroud)
我需要创建一种方法来计算我在上述方法中的向量中收集的所有值的中位数。函数定义如下
/* Calculates the median of the data (datum) from the Collect method.
*/
double Median::Calculate() const
{
}
Run Code Online (Sandbox Code Playgroud)
所以我知道我首先需要对向量进行排序才能找到中位数。以下是我的尝试:
double Median::Calculate() const
{
std::sort(myVector.begin(), myVector.end());
double median;
if (myVector.size() % 2 == 0)
{// even
median = (myVector[myVector.size() / 2 - 1] + myVector[myVector.size() / 2]) / 2;
}
else
{// odd
median = myVector[myVector.size() / 2];
}
return median;
}
Run Code Online (Sandbox Code Playgroud)
但是我意识到这不是编译的,因为方法是const,所以对向量的值进行排序会改变向量,这在const函数中是不允许的。那么我应该为这种方法做什么?
I'm using this code to apply a function (funcX) on my data-frame using a rolling window. The main issue is that the size of this data-frame (data) is very large, and I'm searching for a faster way to do this task.
import numpy as np
def funcX(x):
x = np.sort(x)
xd = np.delete(x, 25)
med = np.median(xd)
return (np.abs(x - med)).mean() + med
med_out = data.var1.rolling(window = 51, center = True).apply(funcX, raw = True)
Run Code Online (Sandbox Code Playgroud)
The only …