我有:
import numpy as np
position = np.array([4, 4.34, 4.69, 5.02, 5.3, 5.7, ..., 4])
x = (B/position**2)*dt
A = np.cumsum(x)
assert A[0] == 0 # I want this to be true.
其中 B
和 dt
是标量常量。这是针对初始条件为 A[0] = 0
的数值积分问题。有没有办法设置 A[0] = 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)
结果:
A = [ 0. 0.0625 0.11559096 0.16105356 0.20073547 0.23633533 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]
结果:
[ 0. 0.05309096 0.09855356 0.13823547 0.17383533 0.20461403]
len(A) == len(position)
如您所见,结果具有不同的长度。其中之一是您所期望的吗?
关于python - 如何使 numpy.cumsum 在第一个值之后开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27258693/