2016-07-29 89 views

回答

14
z[1:] -= z[:-1].copy() 

簡潔而又甜美,沒有緩慢的Python循環。除了第一個元素(z[1:])和除最後一個元素(z[:-1])以外的所有元素,我們都會看到所有元素,然後減去元素。該副本確保我們減去原始元素值而不是我們正在計算的值。 (On NumPy 1.13 and up,你可以跳過copy電話。)

+0

我不認爲這個工程,我收到此錯誤信息: AttributeError的:「名單」對象有沒有屬性「複製」 – Pedro

+0

@Pedro:那是因爲你使用的是一個列表而不是一個數組。儘管存在問題的表示法,'np.cumsum'返回一個數組。 – user2357112

+0

是的,是的! – Pedro

5

您可以使用np.diff來計算元素1...N將採取任何兩個元素之間的差異。這與cumsum相反。唯一的區別是diff不會返回第一個元素,但第一個元素在原始和cumsum輸出中是相同的,因此我們只是重新使用該值。

orig = np.insert(np.diff(z), 0, z[0]) 

而不是insert,你也可以使用np.concatenate

orig = np.concatenate((np.array(z[0]).reshape(1,), np.diff(z))) 

我們也可以只複製和替換元素1...N

orig = z.copy() 
orig[1:] = np.diff(z) 
1

我最喜歡的:

orig = np.r_[z[0], np.diff(z)] 
1

如果你想保持z,您可以使用np.ediff1d

x = np.ediff1d(z, to_begin=z[0])