我有:
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
?
5条答案
按热度按时间relj7zay1#
我不明白你的问题到底是什么,但是这里有一些你可以做的事情。
你可以创建一个长一个索引的A,以零作为第一个条目:
结果:
或者,您可以操作计算以减去结果的第一个条目:
结果:
正如你所看到的,结果有不同的长度。其中一个是你所期望的吗?
xkrw2x1b2#
1D累积
np.cumsum
的 Package 器,将第一个元素设置为0
:示例用法:
N-D累积
一个围绕
np.cumsum
的 Package 器,它将第一个元素设置为0
,并使用N-D数组:示例用法:
qc6wkl3g3#
我完全理解你的痛苦,我想知道为什么Numpy不允许
np.cumsum
这样做。不管怎样,虽然我真的很晚了,而且已经有另一个好答案了,我更喜欢这个:这里的
array
是(B/position**2)*dt
。你也可以改变np.pad
和np.cumsum
的顺序。我只是在数组的开头加上一个零,然后调用np.cumsum
。p1tboqfb4#
可以使用roll(右移1),然后将第一个条目设置为零。
vuktfyat5#
另一种方法是简单地将
0
添加到您正在执行cumsum的列表中:如果
x
是list
或np.ndarray
,则这两种情况都有效。