在xarray或numpy中计算卷积型积分

6ioyuze2  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(171)

我需要计算以下积分:

哪里 H(.) 是heaviside函数。
现在,我知道如何手动迭代数组并计算 I 这样做,但我显然想从xarray或者至少是numpy那里得到加速的好处。
这里一个巨大的复杂性是,我的数据集非常庞大,我必须及时进行数据块处理。但我在到达那里之前就失败了。
例如,我尝试从一个仅依赖于 x , yz 在下面的mwe中,但我在呼叫时仍然收到一个错误 get_z_star() 因为显然 xr.apply_ufunc 正在传递numpy数组而不是dataarray,这正是我想要的:

import numpy as np
import xarray as xr

x = np.linspace(0, 1, 10)
b_tot = xr.DataArray(np.random.randn(10,10,10,10), dims=('x', 'y', 'z', 't'), coords=dict(x=x,
                                                                                          y=x,
                                                                                          z=x,
                                                                                          t=x))
def get_H_func_int(b, b_prime):
    """ b needs to be a float
        b_prime needs to be a DataArray but can't depend on time
    """
    H_func = np.heaviside(b_prime-b, 1/2)
    return H_func.integrate(('x', 'y', 'z'))

def get_z_star(b, b_prime,**kwargs):
    """ b here can be an dataArray but can't depend on time
        b_prime needs to be a DataArray but can't depend on time
    """
    I = xr.apply_ufunc(get_H_func_int, b, b_prime,**kwargs)
    return I

b = b_tot.min()
b_prime = b_tot.isel(t=0)
print(get_H_func_int(b, b_prime))
print(get_z_star(b_prime, b_prime))

有什么想法吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题