【问题标题】:Finding Sum of a Column in a List Getting "TypeError: cannot perform reduce with flexible type"在列表中查找列的总和获取“TypeError:无法使用灵活类型执行减少”
【发布时间】:2012-11-16 23:12:33
【问题描述】:

所以我是 python 新手,并且已经搜索过这个答案,但大多数回复都在我的脑海中。我有一个这样的列表:

right point point 1.76999998093
right fear fear 1.62700009346
right sit sit 1.46899986267
right chord chord 1.47900009155
right speed speeed 1.71300005913
right system system 1.69799995422
right hard hard 1.4470000267
right excite excite 2.93799996376
right govern govern 1.85800004005
right record record 1.62400007248

我正在尝试将列表拆分为列并找到数字的均值/总和/标准差。所以基本上我只是想把最后一个变成一个数组形式,我可以使用 np.mean、np.sum 等。数据在一个名为“正确”的文件中这是我目前所拥有的:

right=open('right.txt').readlines()
for line in right: 
    l=line.split()
    righttime=l[3]
    print righttime

rightsum=np.sum(righttime)
rightmean=np.mean(righttime)

然后我得到这个错误:“TypeError: cannot perform reduce with flexible type”我已经尝试了很多方法并且不断出错。这是我尝试过的另一种看起来很有希望的方法:

def TimeSum(data):
    for line in data: 
        l=line.split()
        righttime=l[3]
        print righttime
    return righttime

rightsum=np.sum(TimeSum(right))

但我有同样的错误。有谁知道怎么做?

【问题讨论】:

    标签: python numpy sum typeerror flexible-type


    【解决方案1】:

    您应该指定(是的,明确地)数据类型,在这种情况下,浮点数(或 int,随便!):

    rightsum  = np.sum(float(righttime))
    rightmean = np.mean(float(righttime))
    

    请记住,您必须为 numpy.sum() 提供一个“类似数组”的结构:

    >>>import numpy as np
    >>>
    >>> mylist = [1, 5, 2]
    >>> a = np.asarray(mylist)
    >>> a.sum()
    8
    

    或者:

    >>> np.sum([1,5,2])
    8
    

    【讨论】:

    • 我想这也是我的问题的一部分。现在我已经分离出数列,但他们不规整:1.06500005722 1.27900004387 1.29099988937 1.64499998093 1.86100006104 1.35100007057 2.07699990273 1.54999995232 1.58100008965这是一个数字只是一个垂直列。我试过做 r=np.array(thelist) 和 r=np.asarray(thelist) 等,但没有运气,当我尝试求和和取平均值时,我总是遇到错误。
    • 你想把所有的数字相加吗?
    【解决方案2】:

    生成一个列表并对元素求和:

    import numpy as np
    
    right = open('right.txt').readlines()
    mylist = []
    
    for line in right:
        l = line.split()  
        mylist.append(float(l[3])) # add to list "mylist"   
    
    rightsum = np.sum(mylist)
    print rightsum
    

    或者,也可以

    mylist = [float(line.split()[3]) for line in right] # generate numbers list
    print np.sum(mylist) # sum numbers
    

    【讨论】:

    • @EvanBrown 什么都别想! ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2014-05-07
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2014-07-30
    • 2016-09-13
    相关资源
    最近更新 更多