【问题标题】:Is there a way of taking the average of multiple lists of equal size?有没有办法取多个相同大小的列表的平均值?
【发布时间】:2021-02-18 22:18:39
【问题描述】:

这是在 python 中。

假设我有三个列表:

x = [[1, 2], [2 , 4], [1, 1]]
y = [[3, 4], [6 , 8], [1, 1]]
z = [[5, 6], [10, 12], [1, 1]]

我要获取列表

avg = [[.. , ..], [.., ..], [.., ..]]

standard_deviation = [[.. , ..], [.., ..], [.., ..]]

例如在哪里avg[0,0] = (1 + 3 + 5)/3 其他值相同。

提前致谢。这将为我节省大量时间。

【问题讨论】:

  • 您应该可以使用zip() 和嵌套列表推导来做到这一点。
  • 你也可以使用statistics模块来计算mean和stddev。
  • StackOverflow 不是免费的编码服务。你应该try to solve the problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
  • avg[0,0] = (1 + 3 + 5)/6 中应该是avg[0,0] = (1 + 3 + 5)/3 吗?
  • @bb1 没错。来晚了:)

标签: python list numpy average


【解决方案1】:

对于一个 numpy 二维数组

a = np.array([[1, 2, 2 , 4, 1, 1],
              [3, 4, 6 , 8, 1, 1],
              [5, 6, 10, 12, 1, 1]])

您可以简单地使用np.mean(a,axis=0)np.std(a,axis=0)

您可以通过执行以下操作轻松创建a

x, y, z = np.array(x), np.array(y), np.array(z)
x, y, z = np.ndarray.flatten(x), np.ndarray.flatten(y), np.ndarray.flatten(z)
a = np.vstack((x,y,z))

【讨论】:

    【解决方案2】:
    import numpy as np
    
    x = [[1, 2], [2 , 4], [1, 1]]
    y = [[3, 4], [6 , 8], [1, 1]]
    z = [[5, 6], [10, 12], [1, 1]]
    
    arr = np.dstack([x, y, z])
    
    # mean
    arr_mean = arr.mean(axis=-1)
    # standard deviation
    arr_std = arr.std(axis=-1)
    
    print(f"Mean:\n {arr_mean}\n")
    print(f"Std:\n {arr_std}")
    

    它给出:

    Mean:
     [[3. 4.]
      [6. 8.]
      [1. 1.]]
    
    Std:
     [[1.63299316 1.63299316]
      [3.26598632 3.26598632]
      [0.         0.        ]]
    

    【讨论】:

    • 我以前从未见过 ndstack。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多