Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy:使用具有不同标记的输入数组沿轴应用_Python_Arrays_Numpy - Fatal编程技术网

Python Numpy:使用具有不同标记的输入数组沿轴应用

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.

我有一个问题,我有两个空间数据集,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,:,:]
,这很好。谢谢