当前位置: 首页 > 知识库问答 >
问题:

如何在一个维度上应用函数,并将结果保存为数据集中的新变量?[重复]

莘俊能
2023-03-14

假设我有一个这样的数据集

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的新变量,是以下方法吗?

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

if 'C' not in ds:
    ds.update({'C': (['x1', 'x2', 'x3'], np.zeros(required_shape))})

for ix1, x1 in enumerate(ds.coords['x1']):
    for ix2, x2 in enumerate(ds.coords['x2']):
        args = dict(x1=ix1, x2=ix2)
        a = ds['A'][args]
        b = ds['B'][args]
        c = func(a.values, b.values)
        ds['C'][args] = c

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


共有1个答案

璩俊雅
2023-03-14

我不太喜欢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))

编辑:顺便说一下,

ds['C'] = func(ds['A'], ds['B'])

对于一个简单的函数,如:

def func(a, b):
    return a + b
 类似资料:
  • 我有一个名为“DAT”的数据帧,有10个数值变量(var1,var2,var3,var4,var5,…Var10),每个变量都有几个观察值… 例如周期1:var 1和var 2之间的线性回归 周期2:var 1和var 3之间的线性回归, 周期3:var 1和var 4之间的线性回归

  • 我有程序: 我的问题是,如何从第一个查询中获取ID并在第二个查询中使用它们,或者我可以通过某种方式声明变量并从第一个查询中选择到这个变量ID中,然后在第二个查询中使用这个变量?我的任务找不到解决方法...请帮帮我

  • 我是Python新手。我在分析脑电图数据。我已经创建了函数,用于计算EEG频带的值(基于此答案),但在跨类别应用该函数并将聚合数据保存到新数据集中时遇到了问题 这是一个简化的数据集,: 下面是函数: 我可以将该函数应用于一次试验,并获得保存在字典中的EEG频带值,。在真实数据集中,每个试验有256个样本;这里一次试验只有2个样本,因此函数只返回带的值。 问题 现在,对于每个,我如何在属于相同条件的

  • 我是python新手,我正在尝试读取文本文件并从文本中收集一些信息。例如,如果文本包含“1.Andrew是XYZ大学的学生,毕业于2020年。”对于上述文本,我要求我的答案是“学生1:Andrew,毕业年份:2020,大学:XYZ”。同样,我需要验证n个学生,并存储n个学生的结果。我只知道这里的基本知识,在这里我可以以不同的格式打开文件,如读、写。。。因此,我对如何进行下一步感到困惑。 任何帮助都

  • 类型异常报告 消息请求处理失败;嵌套异常是java.lang.NullPointerException 说明服务器遇到内部错误,导致它无法完成此请求。 例外情况 org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.nullpointerexception org.springframework.web.

  • 我想继续将此函数应用于我的所有数据页,例如。df1,df2,df3...DF100。输出文件应保持相同的dataframe类型和名称。 lapply函数不起作用,因为它返回一个列表,而不是单独的数据帧。