I have a python list like this,
arr = [110, 60, 30, 10, 5]
What I need to do is actually find the difference of every number with all the other numbers and then find the average of all those differences.
So, for this case, it would first find the difference between 110
and then all the remaining elements, i.e. 60, 30, 10, 5
, and then it will find the difference of 60
with the remaining elements, i.e. 30, 10, 5
and etc.
After which, it will compute the Average of all these differences.
Now, this can easily be done with two For Loops but in O(n^2)
time complexity and also a little bit of "messy" code. I was wondering if there was a faster and more efficient way of doing this same thing?
I'll just give the formula first:
n = len(arr)
out = np.sum(arr * np.arange(n-1, -n, -2) ) / (n*(n-1) / 2)
# 52
Explanation: You want to find the mean of
a[0] - a[1], a[0] - a[2],..., a[0] - a[n-1]
a[1] - a[2],..., a[1] - a[n-1]
...
there, your
`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