Alf*_*lfe 0 python arrays numpy numerical-integration
我想做一些非常简单的事情,但我无法在numpy. 我想对一个由其值(而不是其公式!)给出的函数进行数值和连续积分。这意味着我只想要一个包含输入数组开头总和的数组。例子:
输入:
[ 4, 3, 5, 8 ]
Run Code Online (Sandbox Code Playgroud)
输出:
[ 4, 7, 12, 20 ] # [ sum(i[0:1]), sum(i[0:2]), sum(i[0:3]), sum(i[0:4]) ]
Run Code Online (Sandbox Code Playgroud)
听起来很简单,所以我希望这一定很容易,numpy因为我目前无法找到一些功能。
我发现了类似scipy.integrate.quad()但似乎在给定范围(从 a 到 b)内积分并返回单个值的东西。我需要一个数组作为输出。
你只需要numpy.cumsum().
import numpy as np
a = np.array([ 4, 3, 5, 8 ])
print np.cumsum(a) # prints [ 4 7 12 20]
Run Code Online (Sandbox Code Playgroud)
您正在寻找numpy.cumsum:
>>> numpy.cumsum([ 4, 3, 5, 8 ])
array([ 4, 7, 12, 20])
Run Code Online (Sandbox Code Playgroud)
您可以使用我的一个项目quadpy ( pip install quadpy),它与scipy.integrate.quad()矢量化计算相反。为其提供许多间隔,并获取这些间隔内的所有积分值。
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()
Run Code Online (Sandbox Code Playgroud)