将综合概率密度拆分为两个空间区域

Splitting integrated probability density into two spatial regions

我有一些概率密度函数:

T = 10000
tmin = 0
tmax = 10**20
t = np.linspace(tmin, tmax, T) 
time = np.asarray(t)                 #this line may be redundant 
for j in range(T):
    timedep_PD[j]= probdensity_func(x,time[j],initial_state)

我想将它整合到 x 的两个不同区域。我尝试了以下方法将 timedep_PD 数组分成两个空间区域,然后进行整合:

step =  abs(xmin - xmax) / T
l1 = int(np.floor((abs(ab - xmin)* T ) / abs(xmin - xmax)))
l2 = int(np.floor((abs(bd - ab)* T ) / abs(xmin - xmax)))

#For spatial region 1
R1 = np.empty([l1])
R1 = x[:l1]
for i in range(T):
    Pd1[i] = Pd[i][:l1]

#For spatial region 2
Pd2 = np.empty([T,l2])
R2 = np.empty([l2])
R2 = x[l1:l1+l2]
for i in range(T):
    Pd2[i] = Pd[i][l1:l1+l2]

#Integrating over each spatial region 
for i in range(T):
    P[0][i]   = np.trapz(Pd1[i],R1) 
    P[1][i]   = np.trapz(Pd2[i],R2) 

是否有 easier/more 明确的方法来将概率密度函数分成两个空间区域,然后在每个时间步在每个空间区域内积分?

可以通过使用向量化运算来消除循环。不清楚 Pd 是否是二维 NumPy 数组;它是其他东西(例如,列表的列表),应该将其转换为具有 np.array(...) 的 2D NumPy 数组。之后你可以这样做:

Pd1 = Pd[:, :l1]
Pd2 = Pd[:, l1:l1+l2]

无需循环遍历时间索引;切片一次发生所有时间(用 : 代替索引意味着 "all valid indices")。

同理,np.trapz可以一次性整合所有时间片:

P1 = np.trapz(Pd1, R1, axis=1)
P2 = np.trapz(Pd2, R2, axis=1)

每个 P1 和 P2 现在都是积分的时间序列。 axis 参数确定 Pd1 沿哪个轴积分 - 它是第二个轴,即 space。