我有一个像这样的巨 Python 名单,

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

我需要做的实际上是找出每个数字与所有其他数字的差值,然后求出所有这些差值的平均值.

因此,对于这种情况,它将首先找出110与所有剩余元素之间的差值,即60, 30, 10, 5,然后找出60与其余元素的差值,即30, 10, 5,依此类推.

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

现在,使用两个for循环可以很容易地完成这项工作,但只需O(n^2)倍的时间复杂性,还需要一点"杂乱"的代码.我想知道有没有更快、更有效的方法来做同样的事情?

推荐答案

我先给出公式:

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 

Python相关问答推荐

使用Keras的线性回归参数估计

点到面的Y距离

处理(潜在)不断增长的任务队列的并行/并行方法

标题:如何在Python中使用嵌套饼图可视化分层数据?

Python虚拟环境的轻量级使用

迭代嵌套字典的值

当点击tkinter菜单而不是菜单选项时,如何执行命令?

计算空值

polars:有效的方法来应用函数过滤列的字符串

统计numpy. ndarray中的项目列表出现次数的最快方法

从一个df列提取单词,分配给另一个列

如何将泛型类类型与函数返回类型结合使用?

Scipy差分进化:如何传递矩阵作为参数进行优化?

将字节序列解码为Unicode字符串

设置索引值每隔17行左右更改的索引

Django抛出重复的键值违反唯一约束错误

文本溢出了Kivy的视区

EST格式的Azure数据库笔记本中的当前时间戳

迭代工具组合不会输出大于3的序列

在使用ROLING()获得最大值时,是否可以排除每个窗口中的前n个值?