可能重复:
如何计算一组角度的平均值?
我有两个角度,a = 20度,b = 350度.这两个角度的平均值是185度.但是,如果我们认为最大角度是360度并且允许环绕,则可以看到5度是更接近的平均值.
在计算平均值时,我遇到了一个很好的公式来解决这个问题.有人有任何提示吗?
还是我在这里拍脚?这被认为是数学中的"坏习惯"吗?
我使用64位matlab和32g RAM(你知道的).
我有一个130万个数字(整数)的文件(向量).我想制作另一个相同长度的矢量,其中每个点是整个第一个矢量的加权平均值,加权距离该位置的反距离(实际上它的位置是^ -0.1,不是^ -1,但是出于示例目的) .我不能使用matlab的'过滤'功能,因为它只能在当前点之前平均事物,对吧?为了更清楚地解释,这里有3个元素的例子
data = [ 2 6 9 ]
weights = [ 1 1/2 1/3; 1/2 1 1/2; 1/3 1/2 1 ]
results=data*weights= [ 8 11.5 12.666 ]
i.e.
8 = 2*1 + 6*1/2 + 9*1/3
11.5 = 2*1/2 + 6*1 + 9*1/2
12.666 = 2*1/3 + 6*1/2 + 9*1
Run Code Online (Sandbox Code Playgroud)
因此,新矢量中的每个点都是整个第一个矢量的加权平均值,加权1 /(距该位置的距离+ 1).
我可以重新制作每个点的权重向量,然后逐个元素计算结果向量,但这需要130万次for循环迭代,每个迭代包含130万次乘法.我宁愿使用直接矩阵乘法,将1x1.3mil乘以1.3milx1.3mil,这在理论上是有效的,但我无法加载大的矩阵.
然后我尝试使用shell脚本制作矩阵并在matlab中对其进行索引,因此一次只调用矩阵的相关列,但这也需要很长时间.
我没有必要在matlab中这样做,所以人们对利用如此大的数字和获得平均值的任何建议将不胜感激.因为我使用的是^ -0.1的重量,而不是^ -1,所以它不会快速下降 - 百万分之一点仍然加权为0.25,而原始点加权为1,所以我不能只是削减它因为它变大了.
希望这很清楚吗?
以下是答案的代码(因此可以格式化?):
data = load('/Users/mmanary/Documents/test/insertion.txt');
data=data.';
total=length(data);
x=1:total;
datapad=[zeros(1,total) data];
weights = ([(total+1):-1:2 1:total]).^(-.4);
weights = …Run Code Online (Sandbox Code Playgroud) 我有一个模型,我使用Django ORM从表中提取平均值.我想要舍入Avg值,我该怎么做?
请参阅下文我从YYYY-MM格式的按日期分组的价格模型中提取平均价格,我想自动提取四舍五入到最接近数字的平均值.
rs = Prices.objects.all.extra(select={
'for_date': 'CONCAT(CONCAT(extract( YEAR from for_date ), "-"),
LPAD(extract(MONTH from for_date), 2, "00"))'
}).values('for_date').annotate(price=Avg('price')).order_by('-for_date')
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,每行代表一个人.该数据框有两个变量:年龄和年份.我想制作一张每年平均年龄的表格.我该怎么做?
我能想到的最好的是xtabs(age ~ year, dataframe),但这给了我每年的年龄总和.
我需要计算n×n矩阵中每个非对角线元素的平均值.下三角和上三角是多余的.这是我目前使用的代码:
A <- replicate(500, rnorm(500))
sapply(1:(nrow(A)-1), function(x) mean(A[row(A) == (col(A) - x)]))
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但不适用于较大的矩阵.我拥有的不是很大,大约2-5000 ^ 2,但即使有1000 ^ 2,它也比我想要的时间更长:
A <- replicate(1000, rnorm(1000))
system.time(sapply(1:(nrow(A)-1), function(x) mean(A[row(A) == (col(A) - x)])))
> user system elapsed
> 26.662 4.846 31.494
Run Code Online (Sandbox Code Playgroud)
有更聪明的方法吗?
编辑为了澄清,我想独立地对待每个对角线的平均值,例如:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
Run Code Online (Sandbox Code Playgroud)
我想要:
mean(c(1,2,3))
mean(c(1,2))
mean(1)
Run Code Online (Sandbox Code Playgroud) 我当前的应用程序根据每个用户的所有记录计算点平均值:
SELECT `user_id`, AVG(`points`) AS pts
FROM `players`
WHERE `points` != 0
GROUP BY `user_id`
Run Code Online (Sandbox Code Playgroud)
业务需求已更改,我需要根据每个用户的最近30条记录计算平均值.
相关表格具有以下结构:
桌子:球员; 列:player_id,user_id,match_id,points
表:用户; columns:user_id
以下查询不起作用,但它确实演示了我尝试实现的逻辑.
SELECT @user_id := u.`id`, (
-- Calculate the average for last 30 records
SELECT AVG(plr.`points`)
FROM (
-- Select the last 30 records for evaluation
SELECT p.`points`
FROM `players` AS p
WHERE p.`user_id`=@user_id
ORDER BY `match_id` DESC
LIMIT 30
) AS plr
) AS avg_points
FROM `users` AS u
Run Code Online (Sandbox Code Playgroud)
是否有一种相当有效的方法来根据每个用户的最新30条记录计算平均值?
我需要计算5个单元格的平均值,但如果单元格为空或零,则应忽略该值.
我无法使用它
=AVERAGEIFS(A10;B13;C5;D6;D8;"<>0")
Run Code Online (Sandbox Code Playgroud)
有谁知道计算这个的正确方法?
假设我有一个看起来像这样的任意numpy矩阵:
arr = [[ 6.0 12.0 1.0]
[ 7.0 9.0 1.0]
[ 8.0 7.0 1.0]
[ 4.0 3.0 2.0]
[ 6.0 1.0 2.0]
[ 2.0 5.0 2.0]
[ 9.0 4.0 3.0]
[ 2.0 1.0 4.0]
[ 8.0 4.0 4.0]
[ 3.0 5.0 4.0]]
Run Code Online (Sandbox Code Playgroud)
什么是平均按第三列编号分组的行的有效方法?
预期的产出是:
result = [[ 7.0 9.33 1.0]
[ 4.0 3.0 2.0]
[ 9.0 4.0 3.0]
[ 4.33 3.33 4.0]]
Run Code Online (Sandbox Code Playgroud) 假设我有一个具有以下值的数据帧:
df:
col1 col2 value
1 2 3
1 2 1
2 3 1
Run Code Online (Sandbox Code Playgroud)
我想首先根据前两列(col1和col2)对我的数据帧进行分组,然后对第二列(值)的值进行平均.所以期望的输出看起来像这样:
col1 col2 avg-value
1 2 2
2 3 1
Run Code Online (Sandbox Code Playgroud)
我使用以下代码:
columns = ['col1','col2','avg']
df = pd.DataFrame(columns=columns)
df.loc[0] = [1,2,3]
df.loc[1] = [1,3,3]
print(df[['col1','col2','avg']].groupby('col1','col2').mean())
Run Code Online (Sandbox Code Playgroud)
得到以下错误:
ValueError: No axis named col2 for object type <class 'pandas.core.frame.DataFrame'>
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
我发现了这个平均函数的实现:
avg :: [Int] -> Int
avg = div . sum <*> length
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?我查看了由于以下原因产生的函数div . sum:
(div . sum) :: (Integral a, Foldable t) => t a -> a -> a
Run Code Online (Sandbox Code Playgroud)
我明白这一点,但我无法说出<*> length它是如何工作的。