簡體   English   中英

Python中累加和的矢量化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM