好的所以我在这里看了几个不同的问题,但是我找不到任何有助于解决这个问题的方法。我在健康的病人和病人之间分开了303行,其中有13行。我能够得到两者的平均值,但现在我需要得到这两个平均值的中位数(为了清楚这是输出应该是什么样子)。
Averages of Healthy Patients:
[52.59, 0.56, 2.79, 129.25, 242.64, 0.14, 0.84, 158.38, 0.14, 0.59, 1.41, 0.27, 3.77, 0.00]
Averages of Ill Patients:
[56.63, 0.82, 3.59, 134.57, 251.47, 0.16, 1.17, 139.26, 0.55, 1.57, 1.83, 1.13, 5.80, 2.04]
Seperation Values are:
[54.61, 0.69, 3.19, 131.91, 247.06, 0.15, 1.00, 148.82, 0.34, 1.08, 1.62, 0.70, 4.79, 1.02]
我尝试过尝试获得中位数的不同方法,但是我的所有尝试都失败了,所以我已经完全忘记了如何获得它。所以,如果你能看一眼,看看我是否走在正确的轨道上,只是错过了一些小的东西,或者我已经完全离开了,我会很感激对这个问题的任何见解。
ill_avg = [ill / len(iList) for ill in iList_sum]
hlt_avg = [ hlt / len(hList) for hlt in hList_sum]
median = [(b / len(bList) for b in bList_sum) //2 ]
print('Total of lines Processed: ' + str(numline))
print("Total Healthy Count: " + str(HPcounter))
print("Total Ill Count: " + str(IPcounter))
print("Averages of Healthy Patients:")
print(str(hlt_avg))
print("Averages of Ill Patients ")
print('[' + ', '.join(['{:.2f}'.format(number) for number in ill_avg]) + ']')
print("Seperation Values are:")
print(median)
尝试通过添加两个平均值来获得中位数,但我无法使其工作,我最近的尝试是进行单独平均(bList是所有患者)并获得中位数。如果我可以在没有bList的情况下使第一种方式工作,我会更喜欢它,因为它会使代码更少冗余,并希望更小。 我道歉我忘了提到我不想使用numpy或panda,因为我们还没有超过那些2级。
答案 0 :(得分:1)
使用numpy:
import numpy
a = numpy.array([[52.59, 0.56, 2.79, 129.25, 242.64, 0.14, 0.84, 158.38, 0.14, 0.59, 1.41, 0.27, 3.77, 0.00],
[56.63, 0.82, 3.59, 134.57, 251.47, 0.16, 1.17, 139.26, 0.55, 1.57, 1.83, 1.13, 5.80, 2.04]])
print numpy.mean(a, axis=0)
如果你必须避免numpy,请使用纯Python:
from __future__ import division
def mean(a):
return sum(a) / len(a)
a = [[52.59, 0.56, 2.79, 129.25, 242.64, 0.14, 0.84, 158.38, 0.14, 0.59, 1.41, 0.27, 3.77, 0.00],
[56.63, 0.82, 3.59, 134.57, 251.47, 0.16, 1.17, 139.26, 0.55, 1.57, 1.83, 1.13, 5.80, 2.04]]
print map(mean, zip(*a))