2017-04-06 15 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

출력은 입력 값을 생성하는 함수의 스템 함수 값입니다. – Alfe

+0

아, 잡았다. 미래의 독자를 위해 : 줄기 기능이 어떻게 생겼는지 [here] (http://stackoverflow.com/questions/13145218/stem-plot-in-matplotlib). 그런 다음 리만 합계를 사용합니다. –

답변

3

당신은 numpy.cumsum 찾고 :

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

당신은 당신이 quadpy (pip 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 답장을 보내 주셔서 감사합니다. 질문은 매우 불분명합니다. 특히 숫자 통합에 대한 연결이 명확하지 않으므로 원본 게시물 아래의 토론을 참조하십시오. '나는 줄기 세포 기능을 사용할 수 없으므로 그 과정에서 그 줄기 세포를 만들고 싶습니다. [...]', 그 질문은 실제로 그것에 관한 것이라고 생각했습니다.나는 그에 따라 게시물을 편집하기 시작했으며, 약간의 수정을 한 후에 대답을 주었다. 즉, antiderivative를 만드는 답변을 주었다. 나는 정말로 내가 쓴 패키지를 사용하지만, 나는 그것이 잘못된 것을 보지 못한다. –