Python Numpy:使用具有不同标记的输入数组沿轴应用
我有一个问题,我有两个空间数据集,1)温度(Python Numpy:使用具有不同标记的输入数组沿轴应用,python,arrays,numpy,Python,Arrays,Numpy,我有一个问题,我有两个空间数据集,1)温度(temp),2)深度(sd),需要在计算中组合。我正在计算的第一天(即t=0)的cfgi指标将初始化为全零。随后的每一天(即t=1)计算如下: cfgi = cfgi_t=0 - temp_t=1 * np.exp(-0.2*sd_t=1) 其中t=0或t=1应解释为下标 假设我有这些数据,其中axis=0表示日常曲面: temp = np.array([-1., -1., -1., -1., -1., -1., -1., -1., -1., -1.
temp
),2)深度(sd
),需要在计算中组合。我正在计算的第一天(即t=0)的cfgi指标将初始化为全零。随后的每一天(即t=1)计算如下:
cfgi = cfgi_t=0 - temp_t=1 * np.exp(-0.2*sd_t=1)
其中t=0
或t=1
应解释为下标
假设我有这些数据,其中axis=0表示日常曲面:
temp = np.array([-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
-1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -2.,
-2., -2., -2., -2., -2., -2., -2., -2., -2., -2., -2., -2., -2.,
-2., -2., -2., -2., -2., -2., -2., -2., -2., -2., -2., -3., -3.,
-3., -3., -3., -3., -3., -3., -3., -3., -3., -3., -3., -3., -3.,
-3., -3., -3., -3., -3., -3., -3., -3., -3., -3., -4., -4., -4.,
-4., -4., -4., -4., -4., -4., -4., -4., -4., -4., -4., -4., -4.,
-4., -4., -4., -4., -4., -4., -4., -4., -4., -5., -5., -5., -5.,
-5., -5., -5., -5., -5., -5., -5., -5., -5., -5., -5., -5., -5.,
-5., -5., -5., -5., -5., -5., -5., -5.]).reshape((5,5,5))
sd = np.array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 3.,
3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3.,
3., 3., 3., 3., 3., 3., 3., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 5., 5.,
5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5.,
5., 5., 5., 5., 5., 5.]).reshape(5,5,5)
cfgi = np.zeros(sd.shape)
我的第一个想法是使用np。使用此函数沿\u轴应用\u
:
def calculate_CFGI(a):
return a[0] - a[1]* np.exp(-0.2*a[2])
这是可行的,但我希望有人能帮助我在没有for循环的情况下实现我想要的结果
for i in range(sd.shape[0]-1):
c = cfgi[i,:,:]
t = temp[i+1,:,]
s = sd[i+1,:,]
combined = np.stack([c,t,s])
cfgi[i+1,:,:] = np.apply_along_axis(calculate_CFGI, 0, combined)
预期结果:
array([[[0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ]],
[[1.34064009, 1.34064009, 1.34064009, 1.34064009, 1.34064009],
[1.34064009, 1.34064009, 1.34064009, 1.34064009, 1.34064009],
[1.34064009, 1.34064009, 1.34064009, 1.34064009, 1.34064009],
[1.34064009, 1.34064009, 1.34064009, 1.34064009, 1.34064009],
[1.34064009, 1.34064009, 1.34064009, 1.34064009, 1.34064009]],
[[2.987075 , 2.987075 , 2.987075 , 2.987075 , 2.987075 ],
[2.987075 , 2.987075 , 2.987075 , 2.987075 , 2.987075 ],
[2.987075 , 2.987075 , 2.987075 , 2.987075 , 2.987075 ],
[2.987075 , 2.987075 , 2.987075 , 2.987075 , 2.987075 ],
[2.987075 , 2.987075 , 2.987075 , 2.987075 , 2.987075 ]],
[[4.78439086, 4.78439086, 4.78439086, 4.78439086, 4.78439086],
[4.78439086, 4.78439086, 4.78439086, 4.78439086, 4.78439086],
[4.78439086, 4.78439086, 4.78439086, 4.78439086, 4.78439086],
[4.78439086, 4.78439086, 4.78439086, 4.78439086, 4.78439086],
[4.78439086, 4.78439086, 4.78439086, 4.78439086, 4.78439086]],
[[6.62378806, 6.62378806, 6.62378806, 6.62378806, 6.62378806],
[6.62378806, 6.62378806, 6.62378806, 6.62378806, 6.62378806],
[6.62378806, 6.62378806, 6.62378806, 6.62378806, 6.62378806],
[6.62378806, 6.62378806, 6.62378806, 6.62378806, 6.62378806],
[6.62378806, 6.62378806, 6.62378806, 6.62378806, 6.62378806]]])
让我们仔细看看你的关系:
cfgi[0, ...] = 0
cfgi[1, ...] = 0 - temp[1, ...] * np.exp(-0.2 * sd[1, ...])
cfgi[2, ...] = 0 - temp[1, ...] * np.exp(-0.2 * sd[1, ...]) - temp[2, ...] * np.exp(-0.2 * sd[2, ...])
...
你可以说x=temp*np.exp(0.2*sd)
,然后写:
cfgi[n, ...] = 0 - x[1, ...] - x[2, ...] - ... - x[n, ...]
希望您能在这里看到模式:
cfgi = np.zeros_like(temp)
cfgi[1:, ...] = -np.cumsum(temp[1:, ...] * np.exp(-0.2 * sd[1:, ...]), axis=0)
..
作为cfgi
的索引意味着什么?@dubbdan..
是一个省略号
对象,意思是“:
根据需要多次”。在这种情况下,我们同样可以编写[x,:,:]
,这很好。谢谢