Tyr
Tyr

Reputation: 53

sum through specific values in an array

I have an array of data-points, for example:

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

and I need to perform the following sum on the values:

enter image description here

However, the problem is that I need to perform this sum on each value > i. For example, using the last 3 values in the set the sum would be:

enter image description here

and so on up to 10. If i run something like:

import numpy as np

x = np.array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
alpha = 1/np.log(2) 

for i in x:
    y = sum(x**(alpha)*np.log(x))
print (y)

It returns a single value of y = 247.7827060452275, whereas I need an array of values. I think I need to reverse the order of the data to achieve what I want but I'm having trouble visualising the problem (hope I explained it properly) as a whole so any suggestions would be much appreciated.

Upvotes: 0

Views: 71

Answers (1)

Amitai Irron
Amitai Irron

Reputation: 2055

The following computes all the partial sums of the grand sum in your formula

import numpy as np

# Generate numpy array [1, 10]
x = np.arange(1, 11)
alpha = 1 / np.log(2)
# Compute parts of the sum
parts = x ** alpha * np.log(x)
# Compute all partial sums
part_sums = np.cumsum(parts)
print(part_sums)

You really do not any explicit loop, or a non-numpy operation (like sum()) here. numpy takes care of all your needs.

Upvotes: 1

Related Questions