【发布时间】:2013-12-27 10:54:46
【问题描述】:
我编写了一些代码来计算有效的 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)
【问题讨论】:
-
为什么 lambdas 会在这里提供帮助?
-
对于任何对为什么它总是返回接近 1.0 感到非常困惑的人,您必须注意这里的 itemcores 是 n*p,其中 n(每行)是项目(一个问题),并且p(每列)是您的主题的答案。如果您像我一样使用熊猫,那么您很可能将每一行作为受访者,每一列作为项目。所以要使用这个函数,你需要转置dataframe或者修改函数。另请注意,在 Python 2.7 中,您需要从未来导入除法或将分母括在 float()
标签: python performance numpy