python/numpy/pandas最快的扩展计算算法

python/numpy/pandas最快的扩展计算算法,python,numpy,pandas,scipy,Python,Numpy,Pandas,Scipy,假设我有从2000年1月1日到2011年1月1日的时间序列,对于每个日期,我都有一些浮点值。这是在一个数据框中 我想进行一些计算,也就是说。假设N是数据点的数量,i是当前数据点。psuedo代码: for i in n: some_calc(V0:Vi) + some_calc(Vi:Vn) 我可以很容易地实现这个计算,但看到性能问题,我认为对于大型集合。我认为部分原因是因为数据容器是一个数据帧,切片创建了新的序列,在某些计算中,会发生更多的切片 什么是一种有效的方法来做类似的

假设我有从2000年1月1日到2011年1月1日的时间序列,对于每个日期,我都有一些浮点值。这是在一个数据框中

我想进行一些计算,也就是说。假设N是数据点的数量,i是当前数据点。psuedo代码:

for i in n:
        some_calc(V0:Vi) + some_calc(Vi:Vn)
我可以很容易地实现这个计算,但看到性能问题,我认为对于大型集合。我认为部分原因是因为数据容器是一个数据帧,切片创建了新的序列,在某些计算中,会发生更多的切片


什么是一种有效的方法来做类似的事情?使用numpy可以避免循环吗?

您可以使用以下代码来提高代码性能:

result = []
for item in item_list:
    new_item = do_something_with(item)
    result.append(new_item)
见下例:

# finding the max prior to the current item
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = []
current_max = 0
for i in a:
    current_max = max(i, current_max)
    results.append(current_max)
# results = [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]

您可以尝试将所有数据放入dataframe,并使用dataframe.apply进行行转换。这将避免for循环。有些计算可以矢量化,有些则不能。这个问题不能笼统地回答。不过,在numpy和pandas中,切片并不会创建一个全新的数组,只会在原始数据上创建一个新视图。