当前位置: 首页 > 知识库问答 >
问题:

如何找到Python列表中所有数字之间差异的平均值

华锦
2023-03-14

我有一个这样的python列表,

arr = [110, 60, 30, 10, 5] 

我需要做的是找到每个数字与所有其他数字的差值,然后找到所有这些差值的平均值。

所以,对于这种情况,它首先会找到110和所有剩余元素之间的区别,即60,30,10,5,然后它会找到60与剩余元素的区别,即30,10,5等。

之后,它将计算所有这些差异的平均值。

现在,这可以通过两个For循环轻松完成,但是在O(n^2)时间复杂度和一点点“混乱”代码中。我想知道是否有更快,更有效的方法可以做同样的事情?

共有3个答案

太叔超英
2023-03-14

现在,这可以用两个For循环轻松完成,但时间复杂度<code>O(n^2)</code>和一点<code>凌乱的<code>代码。

没有必要让代码变得混乱。

from statistics import mean

arr = [110, 60, 30, 10, 5]

m = mean(arr[i] - arr[j] for i in range(len(arr)) for j in range(i+1, len(arr)))

print(m)
# 52

如果数组未排序,请将 arr[i] - arr[j] 替换为 abs(arr[i] - arr[j])。

强保臣
2023-03-14

没有@ QuangHoang的回答高明,这个回答用numpy广播计算差异矩阵,然后对上面的三角值进行平均得到答案。

import numpy as np

a = np.array([110, 60, 30, 10, 5])

dif = np.triu(a.reshape(len(a),-1) - a)
out = np.mean(dif[dif != 0])
52.0
习狐若
2023-03-14

我先给出公式:

n = len(arr)
out = np.sum(arr * np.arange(n-1, -n, -2) ) / (n*(n-1) / 2)
# 52

说明:你想找到

a[0] - a[1], a[0] - a[2],..., a[0] - a[n-1]
             a[1] - a[2],..., a[1] - a[n-1]
                         ...

好了,你的

`a[0]` occurs `n-1` times with `+` sign, `0` with `-` -> `n-1` times
`a[1]` occurs `n-2` times with `+` sign, `1` with `-` -> `n-3` times
... and so on 
 类似资料:
  • 问题内容: 我有一个存储一些时间戳的mysql数据库。假设表中所有的都是ID和时间戳。时间戳可能重复。 我想查找不重复的连续行之间的平均时间差(按时间)。有没有办法在SQL中做到这一点? 问题答案: 如果您的表是t,而您的时间戳列是ts,并且您想在几秒钟内得到答案: 对于大型桌子,这将是更快的里程,因为它没有n平方的JOIN 这使用了一个可爱的数学技巧,可以解决该问题。暂时忽略重复的问题。连续行之

  • 我想找出numpy数组中所有值之间的差异,并将其附加到一个新列表中。 也就是说,对于一个的每个值

  • 问题内容: 给定一个数字列表,人们如何发现第()个元素与其第()个元素之间的差异? 使用表达式还是列表理解更好? 例如: 给定一个列表,我们的目标是要找到一个列表,因为,等等。 问题答案:

  • 问题内容: 我必须在Python中找到列表的平均值。到目前为止,这是我的代码 我已经知道了,所以它可以将列表中的值相加,但是我不知道如何将其划分为它们? 问题答案: 在Python 3.4+上,你可以使用 statistics.mean() 在旧版本的Python上,你可以执行 在Python 2上,你需要转换len为浮点数才能进行浮点数除法 无需使用。它慢得多,并已在Python 3 中删除。

  • 问题内容: 我有一列的数据像 我需要编写一个SQL查询/过程,这将有助于我获取日期之间差异的平均值。对于上面的示例,它将是 (19 + 8 + 10)/3=12.33。 请提供帮助。 在此先感谢Geetha 问题答案: 我不知道您的RDBMS,但这是来自SQL Server。另外,您的计算之一是错误的-02/09/2011-13/08/2011是20,而不是19。 产生的结果是12.667:(20

  • 我是一个新手在python和我试图弄清楚,我如何区分2列表,如下所示 而且 问题是,这两个列表都有元素,我需要一个可靠的条件来满足,如果列表中有一个项是字符串而不是。列表也可能有7个,只有一个项目是字符串。