我對python numpy很新穎。使用numpy添加多個ndarry
如果我有一個numpy向量列表。確保計算速度的最佳方法是什麼?
我目前正在做這個,我覺得它太慢了。
vec = sum(list of numpy vectors) # 4 vectors of 500 dimensions each
使用總和確實佔用了相當多的時間。
我對python numpy很新穎。使用numpy添加多個ndarry
如果我有一個numpy向量列表。確保計算速度的最佳方法是什麼?
我目前正在做這個,我覺得它太慢了。
vec = sum(list of numpy vectors) # 4 vectors of 500 dimensions each
使用總和確實佔用了相當多的時間。
在我看來,這已經是最快的變種了。它是純粹的numpy
並且因此在C
-code內計算。
替代方法可以是分別計算每個矢量的總和,然後對列表的值進行求和或堆棧所有矢量,然後進行總結。但兩者都較慢:
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
這是你正在嘗試做什麼(但w ith更大的陣列)?
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,)
或ndim==500
的陣列?如果是後者,那麼總共有多少個元素。
事實上,它是這些數組中的4個列表不應該是一個大問題。 array1 + array2
什麼時候開始?
如果陣列只需要每500種元素,合計時間是微不足道:
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
在另一方面陣列有許多小尺寸的總和是較慢的,只是因爲這樣的陣列大得多
In [204]: x=np.ones((3,)*10)
In [205]: timeit z=sum([x,x,x,x])
1000 loops, best of 3: 1.6 ms per loop
您對問題的描述不明確。 – hpaulj