使用numpy添加多个ndarry

时间:2016-06-11 16:25:38

标签: python numpy vector

我对python numpy很新。

如果我有一个numpy向量列表。什么是确保计算速度快的最佳方法。

我目前正在做这件事,我发现它太慢了。

vec = sum(list of numpy vectors) # 4 vectors of 500 dimensions each

使用sum确实占用了相当多的时间。

2 个答案:

答案 0 :(得分:2)

这是你想要做的(但有更大的数组)?

git revert 5816058f

In [193]: sum([np.ones((2,3)),np.arange(6).reshape(2,3)]) Out[193]: array([[ 1., 2., 3.], [ 4., 5., 6.]]) 描述不清楚。你的意思是形状为500 dimensions each(500,)的数组?如果是后者,那么总共有多少元素。

事实上,它是这些数组中的4个的列表不应该是一个大问题。 ndim==500的时间是什么?

如果数组每个只有500个元素,那么总和时间是微不足道的:

array1 + array2
另一方面,具有许多小尺寸的数组的总和较慢,因为这样的数组要大得多

In [195]: timeit sum([np.arange(500),np.arange(500),np.arange(500),np.arange(500)]) 
10000 loops, best of 3: 20.9 µs per loop

答案 1 :(得分:1)

在我看来,这已经是最快的变种了。它是纯numpy,因此在C - 代码中计算。

替代方案可以是单独计算每个向量的总和,然后对列表的值求和或者叠加所有向量,然后求和。但两者都比较慢:

import numpy as np
import time

n = 10000

start = time.time()
for i in range(n): 
    lst = np.hstack([np.random.random(500) for i in range(4)])
    x = np.sum(lst)
print("stack then np.sum: ", time.time()- start)

start = time.time()
for i in range(n): 
    lst = [np.sum(np.random.random(500)) for i in range(4)]
    x = np.sum(lst)
print("sum up individually: ", time.time()- start)


start = time.time()
for i in range(n):
    lst = [np.random.random(500) for i in range(4)]
    x = np.sum(lst)
print("np.sum on list of vectors:", time.time()- start)

输出:

  

堆栈然后np.sum:0.35804247856140137

     

单独总结:0.400468111038208

     载体列表上的

np.sum:0.3427283763885498