[英]Vectorization of cumulative sum in python
我試圖對我的代碼進行矢量化/廣播(不確定它的正式名稱),以便使其更快,但是我不太明白。 我想我應該使用的是numpy.cumsum(其中axis = 0),但我不知道如何在正確的數組中(快速)使用它。
我想要的這段代碼基本上是l1的絕對和,用於將l2中的每個元素加到l1中的所有數字上。 因此,這給出的答案不是一個,而是len(l2)個。 下面的(非矢量化)代碼給出正確的輸出。
# l1 and l2 are numpy arrays
for i in l2:
l1 += i
answer = numpy.sum(numpy.absolute(l1))
print answer
誰能提供答案或提示?
訣竅是首先將兩個一維數組合並為一個二維數組,然后對其求和。 如果您有一個形狀為(a,1)
的向量,並使用形狀(b,)
的數組對其進行廣播,則所得數組將為形狀(a,b)
。 將具有長度為1的額外軸添加到數組中以獲得這種行為很方便。
這是一種無需循環即可獲得相同答案的方法
# Assume l1 has length n1, l2 has length n2
suml2 = np.cumsum(l2) # length n2
y = l1 + suml2[:,np.newaxis] # shape (n2, n1)
answer = np.sum(np.abs(y), axis=1) # shape (n2,)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.