将综合概率密度拆分为两个空间区域
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。
我有一些概率密度函数:
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。