简体   繁体   中英

calculate the mean of every nth list in a list of lists using a loop

I am trying to calculate the mean of every nth list in a list of lists using a loop. I have been able to do so without a loop, but this will prove laborious to do when the list of lists gets longer.

Im struggling to explain this so heres the code

import numpy as np
import matplotlib.pyplot as plt 


list = []
t_r = np.arange(0,8)
i = 0
a =[[0.98,1.93,2.99,4.01,4.92,6.00,7.08,7.67, 8.00],[0,0,0,1,2,3,3,2,3],[0.93,1.99,2.99,3.91,4.82,6.03,7.01,8.00],[0,1,2,3,4,5,5,6],[0.88,2.09,3.01,4.11,5.65,7.12,8.00],[4,5,6,7,8,7,6]]
#########################
for t in t_r:
    b1 = np.array(a[0]) <= t
    b2 = np.array(a[2]) <= t 
    b3 = np.array(a[4]) <= t 

    ind1 = [(np.count_nonzero(b1))]
    ind2 = [(np.count_nonzero(b2))]
    ind3 = [(np.count_nonzero(b3))]

    x1 = np.array(a[1])
    x_mean1 = x1[ind1]
    x2 = np.array(a[3])
    x_mean2 = x2[ind2]
    x3 = np.array(a[5])
    x_mean3 = x3[ind2]

    x_mean_list = [x_mean1, x_mean2, x_mean3]
    x_average = np.mean(x_mean_list)    
    list.append(x_average)
#########################



no_of_sim = 3
counter = 0
while counter <= ((no_of_sim*2)-1):
    plt.plot(a[counter],a[counter+1], lw = 0.5)
    plt.plot(list, color = "black")
    plt.plot(x_average)
    plt.xlabel('Time (s)')
    plt.ylabel('copy no.')
    counter += 2
plt.show()

The bit inbetween the hashtags is the bit I'm trying to write a loop for so I don't have to manually change it when the list if lists gets much longer

Your code between the hashes are equivalent to the following:

data = [np.array(x) for x in a[::2]]
idx = [np.array(x) for x in a[1::2]]

lst = [np.mean([x[(d<=t).sum()] for x,d in zip(idx,data)]) for t in t_r ]

Output:

[1.3333333333333333,
 2.0,
 2.3333333333333335,
 3.3333333333333335,
 4.0,
 5.333333333333333,
 5.0,
 5.0]

check out this code:

a =[[0.98,1.93,2.99,4.01,4.92,6.00,7.08,7.67, 8.00],[0,0,0,1,2,3,3,2,3],[0.93,1.99,2.99,3.91,4.82,6.03,7.01,8.00],[0,1,2,3,4,5,5,6],[0.88,2.09,3.01,4.11,5.65,7.12,8.00],[4,5,6,7,8,7,6]]

i = 0
for li in a:
    print("Mean of list at index", i, "is:", sum(li)/len(li))
    i += 1

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM