2017-04-06 135 views
-2

我想做一些非常簡單的事情,但我無法在numpy的深處找到它。我想用數值和不斷整合由它的值給出的函數。這意味着我只需要一個包含輸入數組開頭總和的數組。例如:numpy中的數字積分

輸入:

[ 4, 3, 5, 8 ] 

輸出:

[ 4, 7, 12, 20 ] # [ sum(i[0:1]), sum(i[0:2]), sum(i[0:3]), sum(i[0:4]) ] 

聽起來很直截了當,所以我希望這一定是很容易與一些numpy功能目前我無法找到。

我發現像scipy.integrate.quad()這樣的東西,但似乎整合給定範圍(從a到b)和返回一個單一的值。我需要一個數組作爲輸出。

+2

這是怎麼整合? –

+0

輸出是生成輸入值的函數的stemfunction的值。 – Alfe

+0

啊,呃。對於未來的讀者:[這裏](http://stackoverflow.com/questions/13145218/stem-plot-in-matplotlib)是一個幹函數的樣子。然後我們使用黎曼和。 –

回答

3

您正在尋找numpy.cumsum

>>> numpy.cumsum([ 4, 3, 5, 8 ]) 
    array([ 4, 7, 12, 20]) 
2

您可以將quadpypip install quadpy),我的一個項目,而不是scipy.integrate.quad()不會矢量compution。堅持提供它許多間隔,並獲得在這些間隔回來的所有積分值。

import numpy 
import quadpy 

a = 0.0 
b = 3.0 
h = 1.0e-2 
n = int((b-a)/h) 

x0 = numpy.linspace(a, b, num=n, endpoint=False) 
x1 = x0 + h 
intervals = numpy.stack([x0, x1]) 

vals = quadpy.line_segment.integrate(
     lambda x: numpy.sin(x), 
     intervals, 
     quadpy.line_segment.GaussLegendre(5) 
     ) 

res = numpy.cumsum(vals) 

import matplotlib.pyplot as plt 
plt.plot(x1, numpy.sin(x1), label='f') 
plt.plot(x1, res, label='F') 
plt.legend() 
plt.show() 

enter image description here

+0

不錯!但實際上我只是有一堆我想不斷總結的數字(現在我知道'np.cumsum()'是這樣做的,但是有人發現我的這個(數值積分)的措詞如此誤導,以至於他改寫了我的問題從根本上說,最終它看起來像我在尋找函數,我解開了(在我的眼中方式太嚴格)的變化,我想你的答案是在那段時間內給出的 – Alfe

+0

@Nico你不能只編輯一個問題,例如它允許你寫一個答案,其主要目標似乎是促進你的軟件。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest感謝您的答覆。問題是非常不清楚,特別是它與數值積分的聯繫;請參閱原始帖子下面的討論。從'我沒有可用的莖功能,我想在這個過程中創建它。'',我認爲這個問題是真的。我相應地編輯了這篇文章,經過一番修改之後給出了一個答案,即創建了反導因子的答案。我確實使用了我寫的一個軟件包,但我沒有看到那有什麼問題。 –