python中的选择性平均

时间:2017-08-25 12:06:49

标签: python random

所以这段代码只是将列表1,2,3,4(x4)随机化,然后将其写入文本文件并将其读回。它打印所有的16,但我想知道是否有一种方法使16个中的4组中的4组,然后我可以定义它并单独调用它们并且平均只取其中的4个。

import numpy
import random
members, n_groups = 4, 4
participants=list(range(1,members+1))*n_groups
print participants 
random.shuffle(participants)

with open('myfile1.txt','w') as tf:
    for i in range(n_groups):
        group = participants[i*members:(i+1)*members]
        for participant in group:
            tf.write(str(participant)+' ')
            tf.write('\n')

with open('myfile1.txt','r') as tf:
    g = [map(int, line.split()) for line in tf.readlines()]
    print g 
    print numpy.mean(g, axis=1)

对不起它有点笨拙,基本上想要取出它吐出的前4个数字的平均值!

谢谢!

新代码:

update-database -Migration initMigrationProduct -c ProductContext -Environment Production

由于某种原因仍无效?

1 个答案:

答案 0 :(得分:1)

不是每行写一个数字,而是直接写一组数字。为此,您只需要从第2个删除write('\n')并添加空格。 然后,您可以使用line.split()直接上传每组4个成员(我添加了一个转换来检索int格式,但您可以将其更改为float或您需要的任何内容)。 使用numpy,您可以计算每个组的平均值。

给出了:

import numpy
import random
members, n_groups = 4, 4
participants= range(1,members+1)*n_groups
print participants
random.shuffle(participants)

with open('myfile1.txt','w') as tf:
    for i in range(n_groups):
        group = participants[i*members:(i+1)*members]
        for participant in group:
            tf.write(str(participant)+' ')
        tf.write('\n')

with open('myfile1.txt','r') as tf:
    g = [map(int, line.split()) for line in tf.readlines()]
    print g
    print numpy.mean(g, axis=1)

输出

# participants
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
# g
[[3, 3, 2, 2], [4, 1, 1, 4], [2, 2, 4, 3], [3, 1, 4, 1]]
# mean per group
[ 2.5   2.5   2.75  2.25]

myfile1.txt

3 3 2 2 
4 1 1 4 
2 2 4 3 
3 1 4 1