如何将常数除以范围(366)?

时间:2013-07-08 09:20:56

标签: python numpy divide

我是python的新手并且正在使用函数customer_state。 我有另一个函数从csv文件中获取数据。我想从该文件中获取一列的总和,并得到sm1(这给出了时间t(以天为单位)的增长率。 这是我到目前为止所做的:

def del_pass():
    reader = csv.DictReader(open("data.csv", "rb"))
    all_rows = list()
    for row in reader:
        all_rows.append(row)
    return all rows     

def get_one_column(name):
    column_list= list()
    rows = del_pass()
    for row in rows:
        value  = row(name)
        if value =='':
           value = 0
        else:
           value = int(value)
    column_list.append(value)
    return column_list

def customer_state(x):
    sm = sum(x)
    t = range(366)
    sm1 = sm + (0.07 * (t/365) * sm)
    return sm, sm1

def example_use1():
    column_name ="totcust"
    column = get_one_column(column_name)
    column_stats = customer_state(column)
    print column_stats 

除了customer_state(x)之外,每个函数似乎都运行良好,这给了我以下错误。

    sm1 = (sm + ((0.07/t) * sm))
TypeError: unsupported operand type(s) for /: 'float' and 'list'

1 个答案:

答案 0 :(得分:0)

我假设0.07 /范围(366)应该返回0.07的列表除以范围(366)中的相应元素?

在这种情况下,您可以使用列表理解:

sm1 = [sm + ((0.07/t) * sm)) for t in xrange(1,366)]

或者,因为您将numpy-tag应用于问题,所以将t初始化为numpy数组:

t = numpy.mgrid[1:366]
sm1 = sm + (0.07/t) * sm

然后也将使用元素分割。

在这两种情况下:请注意索引以及范围列表从零开始,因此这些列表中的第一个元素将是Inf。