【问题标题】:Using python for loop to average data使用python for循环来平均数据
【发布时间】:2016-08-17 17:08:21
【问题描述】:

我有一个数据集,其中包含 20 年的月平均值,该数据集包含在一个尺寸为 (1x240) 的 numpy 数组中。我正在尝试编写一个函数来吐出年度平均值。我已经设法做到了(我相信),使用 for 循环,但是当我将完全相同的代码粘贴到函数中时,它只给了我应该是 20 个值中的第一个。

def yearlymean_gm(gm_data):
    data= np.load(gm_data)
        for i in range (0,20):
        average= data[i*12:i*12+12].sum()/12
        print average
        return average

gm_data 是文件的名称。

当我只是手动输入时

data= np.load(gm_data)
for i in range (0,20):
    average= data[i*12:i*12+12].sum()/12
    print average
    return average

它成功读出了 20 个值。我很确定我只是不太了解 for 循环如何在函数的上下文中工作。任何解释(和修复,如果可能的话),都会很棒。

其次,我希望将这些值输入到一个 numpy 数组中。我试过了

def yearlymean_gm(gm_data):
    data= np.load(gm_data)
    average = np.zeroes(20)  
    for i in range (0,20):
        average[i]= data[i*12:i*12+12].sum()/12
        print average
        return average

但这给了我一个很长很古怪的清单。这方面的帮助也很酷。谢谢!

【问题讨论】:

  • 我确定这是重复的,但我找不到。您的 for 循环体内有您的 return,因此它只完成一次迭代。然后函数结束,所以你的循环的其余部分是 kaput。
  • 示例中的缩进有些问题。此外,第二个代码块包含return,但它不在函数中。
  • @Two-BitAlchemist 我敢肯定有很多,但他们从来没有一个可以轻松追踪的标题:) 缩进是无效的,所以我不确定我们能否确认这是原因。
  • 通过 pandas 的聚合数据集可能会为您提供您正在寻找的结果(并且不需要迭代逻辑)。如果您愿意,我可以提供更多详细信息 - 请告诉我。
  • @Sevyns 对于他想要计算的内容,他正走在正确的轨道上......他只需要取消他的退货声明

标签: python arrays numpy for-loop


【解决方案1】:

为什么不完全避免“for”循环?

def yearlymean_gm(gm_data):
    data = np.load(gm_data)
    data = data.reshape((12, 20))
    print data.mean(axis=1)
    return data.mean(axis=1)

【讨论】:

    【解决方案2】:

    这就是你需要的……

    def yearlymean_gm(gm_data):
        data= np.load(gm_data)
        average = np.zeroes(20)  
        for i in range (0,20):
            average[i]= data[i*12:i*12+12].sum()/12
            print average
        return average  #don't return until the loop has completed
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 2020-04-27
      • 2023-01-09
      • 2016-12-22
      • 2018-10-04
      相关资源
      最近更新 更多