我做了一些计算Cronbach Alpha的代码。但是我不太擅长使用lambda函数。有没有一种方法可以通过使用lambda而不是svar()函数并通过使用numpy数组来消除一些for循环来减少代码并提高效率?在
import numpy as np
def svar(X):
n = float(len(X))
svar=(sum([(x-np.mean(X))**2 for x in X]) / n)* n/(n-1.)
return svar
def CronbachAlpha(itemscores):
itemvars = [svar(item) for item in itemscores]
tscores = [0] * len(itemscores[0])
for item in itemscores:
for i in range(len(item)):
tscores[i]+= item[i]
nitems = len(itemscores)
#print "total scores=", tscores, 'number of items=', nitems
Calpha=nitems/(nitems-1.) * (1-sum(itemvars)/ svar(tscores))
return Calpha
###########Test################
itemscores = [[ 4,14,3,3,23,4,52,3,33,3],
[ 5,14,4,3,24,5,55,4,15,3]]
print "Cronbach alpha = ", CronbachAlpha(itemscores)
NumPy内置了一个方差函数。指定
ddof=1
使用分母N-1,给出样本方差。还有一个sum
内置的。在正如Julien Marrec提到的,我建议对CronbachAlpha进行以下重构:
相关问题 更多 >
编程相关推荐