小编use*_*006的帖子

提高Cronbach Alpha代码python numpy的性能

我制作了一些计算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)
Run Code Online (Sandbox Code Playgroud)

python performance numpy

2
推荐指数
1
解决办法
3949
查看次数

从numpy数组python中提取索引

我想要这个等式的最后4个值.

有没有更好的方法一步到位,比如修改方程或除了使用之外的其他提取技术 delete

a=5
d=2

n = np.cumsum(d ** np.arange(1, a+1))
print 'n=', n
n = np.delete(n,0)
print 'n extracted=', n

n= [ 2  6 14 30 62]
n extracted= [ 6 14 30 62]
Run Code Online (Sandbox Code Playgroud)

python numpy

2
推荐指数
1
解决办法
210
查看次数

创建具有滞后的 numpy 矩阵

可以说我有

q=2

y=[5,10,5,15,20,25,30,35,5,10,15,20]

n=len(y)
Run Code Online (Sandbox Code Playgroud)

我想制作一个具有 nxq 维度的矩阵,其中第一行为 [5,10],第二行为 [10,5],第三行为 [5,15] ...等。

有没有办法做到这一点,或者我必须使用for loopandconcatenate函数?

iteration numpy matrix

2
推荐指数
1
解决办法
3186
查看次数

Python在没有for循环的情况下更有效地迭代pandas

我正在创建一个列,为某些字符串添加标记,并在此处输入代码:

import pandas as pd
import numpy as np
import re

data=pd.DataFrame({'Lang':["Python", "Cython", "Scipy", "Numpy", "Pandas"], })
data['Type'] = ""


pat = ["^P\w", "^S\w"]

for i in range (len(data.Lang)):
    if re.search(pat[0],data.Lang.ix[i]):
        data.Type.ix[i] = "B"

    if re.search(pat[1],data.Lang.ix[i]):
        data.Type.ix[i]= "A"


print data
Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱那个for循环?如果它numpy有一个arange类似于我想要找到的功能.

python iteration pandas

2
推荐指数
1
解决办法
1102
查看次数

Pandas计算数据汇总中的百分比

可以说我有一个数据帧

df=pd.DataFrame({'Location': [ 'Ala', 'SS', 'Ala', 'Ala', 'SS', 'Ala', 'SS', 'TXE', 'TXE', 'TXE'],
                 'Bid': ['E','N','E','N','N','E', 'E',np.nan,np.nan,'A']})
Run Code Online (Sandbox Code Playgroud)

如果S是密封投标,N是没有投标的人,Nan不存在,O是公开投标.

我想计算出公式为(E + A)/(E + A + N)的投标人的百分比.做透视表然后实现等式的最佳方法是什么?

df=pd.DataFrame({'Location': [ 'Ala', 'SS', 'Ala', 'Ala', 'SS', 'Ala', 'SS', 'TXE', 'TXE', 'TXE'],
                 'Bid': ['E','N','E','N','N','E', 'E',np.nan,np.nan,'A']})


pt = df.pivot_table(rows='Location', cols='Bid', aggfunc='size', fill_value=0)

pt['Percentage']=(pt.A + pt.E)/(pt.A+pt.E+pt.N)
print (pt)

>>> 
Bid       A  E  N  Percentage
Location                     
Ala       0  3  1    0.750000
SS        0  1  2    0.333333
TXE       1  0  0    1.000000

[3 rows x 4 columns]
Run Code Online (Sandbox Code Playgroud)

这是计算百分比的最佳方式还是比枢轴表有更好的方法?

python pandas

0
推荐指数
1
解决办法
7200
查看次数

标签 统计

python ×4

numpy ×3

iteration ×2

pandas ×2

matrix ×1

performance ×1