2017-02-09 48 views
-1

我有一個數學問題,有人問我如何有效地將一個矢量的幾個元素的總和獲得到python中的程序中。例如,我們有一個具有n個元素(n = 100000000,n是一個隨機實數)的向量(v),我們想要計算v(10)和v(100000)之間和之後的和v(8)和v(100)。實際上,我們想用(A < B)有效地計算兩個元素A和B之間元素的總和。如何有效地計算矢量上兩個元素之間的總和

我不直接找代碼找答案。我正在尋找一個數學解釋來理解這個問題,這當然是矢量高效演算中的一個基本概念。

+0

這個問題歸結爲「我如何表示矢量?」,並且有許多庫已經這樣做了。 – chepner

回答

0

的解決方案是計算在第一新向量(W),其如果我們想要v(1)和v(1000)之間的和,那麼答案是w(1000),如果我們想要v(10)和v(1000)之間的和, ,答案將是w(1000)-w(10-1)。唯一低的計算結果是累計總和。

-1

最簡單的方法將是建立一個memoisation表:

def sums(L): 
    answer = {i:{j:0 for j in range(i,len(L))} for i in range(len(L))} 
    for i,num in enumerate(L): 
     answer[i][i] = L[i] 
     for j in range(i+1, len(L)): 
      answer[i][j] = answer[i][j-1] + L[j] 

    return answer 

然後查詢該表如下:

table = sums(my_vector) 
print(table[8][100]) 
+0

OP狀態:我沒有直接找代碼找答案。我正在尋找一個數學解釋來理解這個問題,這當然是矢量高效演算中的一個基本概念。 – Varaquilex

+0

但是,如果你有大量的數據,建立一個memoisation表將是巨大的權利? 我只是想和朋友想想: 如果我建立一個單元垂直向量(u),它的大小與我們想要求和的元素數量有關。 A是我們想要的最小元素,B是最大值(8和100取與之前相同的值)。所以,u =零(B-A + 1,1)+1; 然後,總和將是:v(1,a:b)* u 是否執行此演算而不記住數據的有效方式? –

+0

@LionelMattéo:對於向量中的'n'個元素,表的大小增長爲n^2。如果你可以發表一個小例子,我很樂意再看看這個 – inspectorG4dget

相關問題