Gla*_*rse 3 python numpy numerical-methods
我有一个创建列表的等式:
import numpy as np
A = np.cumsum((B/position**2)*dt)
A[0] = 0
Run Code Online (Sandbox Code Playgroud)
其中B是常数,并且位置是列表:[4,4.34,4.69,5.02,5.3,5.7,...,4] dt也是常数.我这样做是为了进行数值积分.A [0] = 0是问题的初始条件,但这不会反映在等式中.如果我在np.cumsum之后有A [0],那么A [1]将使用方程中最初记录的A [0].有没有办法让方程式使用给定的A [0],然后在A [0]之后为所有事物做一个cumsum?
我不明白你的问题究竟是什么,但这里有一些你可以做的事情A[0] = 0.
您可以将A创建为一个索引更长,以将零作为第一个条目:
# initialize example data
import numpy as np
B = 1
dt = 1
position = np.array([4, 4.34, 4.69, 5.02, 5.3, 5.7])
# do calculation
A = np.zeros(len(position) + 1)
A[1:] = np.cumsum((B/position**2)*dt)
Run Code Online (Sandbox Code Playgroud)
结果:
A = [ 0. 0.0625 0.11559096 0.16105356 0.20073547 0.23633533
Run Code Online (Sandbox Code Playgroud)
0.26711403] len(A)== len(position)+ 1
或者,您可以操作计算以减去结果的第一个条目:
# initialize example data
import numpy as np
B = 1
dt = 1
position = np.array([4, 4.34, 4.69, 5.02, 5.3, 5.7])
# do calculation
A = np.cumsum((B/position**2)*dt)
A = A - A[0]
Run Code Online (Sandbox Code Playgroud)
结果:
[ 0. 0.05309096 0.09855356 0.13823547 0.17383533 0.20461403]
len(A) == len(position)
Run Code Online (Sandbox Code Playgroud)
如您所见,结果有不同的长度.其中一个是你所期望的吗?
我完全理解你的痛苦,我想知道为什么 Numpy 不允许这样做np.cumsum。不管怎样,虽然我真的迟到了,而且已经有了另一个很好的答案,但我更喜欢这个:
np.cumsum(np.pad(array, (1, 0), "constant"))
Run Code Online (Sandbox Code Playgroud)
array你的情况是在哪里(B/position**2)*dt。您也可以更改np.pad和的顺序。np.cumsum我只是在数组的开头添加一个零并调用np.cumsum.