如何应用一维函数并将结果保存为数据集中的新变量?

2024-05-06 13:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样的数据集

nx1, nx2, nx3 = 5, 3, 20

ds = xray.Dataset()
ds.coords.update({'x1': ('x1', range(nx1)), 
                  'x2': ('x2', range(nx2)), 
                  'x3': ('x3', range(nx3))})

ds['A'] = (['x1', 'x2', 'x3'], np.random.randn(nx1, nx2, nx3))
ds['B'] = (['x1', 'x2', 'x3'], np.random.randn(nx1, nx2, nx3))

函数func作为输入变量a和B,但它沿着x3维工作,只接受形状(nx3,)的数组,并输出形状(nx3,)的数组。如果我想将这个函数应用于上面的数据集,并将结果保存为一个名为C的新变量,那么下面的方法是:

^{pr2}$

通过在数据集中初始化一个新数组并在其他维度上使用for循环?在


Tags: 数据函数npdsrangerandom数组形状
1条回答
网友
1楼 · 发布于 2024-05-06 13:27:18

我不太喜欢pandas,但是对于其他数据类型,一个通用的解决方案是使用一个理解来代替,并且去掉嵌套循环和初始化步骤。在

required_shape = (len(ds.coords['x1']), 
                  len(ds.coords['x2']),
                  len(ds.coords['x3']))

ds['C'] = (['x1', 'x2', 'x3'], np.array([
    func(ds['A'][args].values, ds['B'][args].values)
    for ix1, x1 in enumerate(ds.coords['x1'])
    for ix2, x2 in enumerate(ds.coords['x2'])
    for args in (dict(x1=ix1, x2=ix2),)]).reshape(required_shape))

编辑:顺便说一句

^{pr2}$

对于一个简单的函数来说,似乎工作得很好:

^{3}$

相关问题 更多 >