【问题标题】:Calculate the mean and variance by element by element of multiple arrays in PythonPython中逐元素计算多个数组的均值和方差
【发布时间】:2022-12-09 00:51:08
【问题描述】:

我有一段代码提供了五个数组:

for i in range(10):
    x = pic[10,15+i]

这会产生以下十个数组:

[504 591 471 ...   0   0   0]
[748 753 658 ...  94 138 101]
[814 781 710 ...   0   0   0]
[754 719 663 ...   0   0   0]
[1068  982 1096 ...    0    0    0]
[845 811 709 ...   0   0   0]
[1002  985  915 ...    0    0    0]
[1036  916  860 ...    0    0    0]
[570 623 722 ...   0   0   0]
[728 711 738 ...   0   0  90]

每个数组中有 1220 个元素,由 ... 表示。我想逐个元素(按列)计算这 10 个数组的平均值。所以,我想要这样的最终输出:

[860.9, 827.4, 795.3, ...  9.4, 13.8, 19.1]  

我不知道如何在 Python 中执行此操作。任何帮助将不胜感激。另外,如果你也能帮我计算方差,那将是一个了不起的帮助!

【问题讨论】:

    标签: python arrays multidimensional-array mean variance


    【解决方案1】:

    使用 zip 功能:-

    代码:-

    import statistics
    #Using package statistics :- Variance
    #Using Zip function -: mean
    lis=[[22,23,20,32,45,0],
         [25,23,20,33,39,0],
         [26,23,26,31,56,0],
         [28,23,26,0,11,0],
         [25,34,25,0,0,0]]
    mean=[]
    variance=[]
    for i in zip(*lis):
        mean.append(sum(i)/len(i))
        variance.append(statistics.variance(i))
    print(mean)
    print(variance)
    

    输出:-

    [25.2, 25.2, 23.4, 19.2, 30.2, 0.0]
    [4.7, 24.2, 9.8, 307.7, 560.7, 0]
    

    更新:-询问- 试试这个不知道它是否有效请告诉我..

    x=[]
    mean=[]
    variance=[]
    for i in range(10):
        x.append(pic[10,15+i])
    
    for i in zip(*x):
        mean.append(sum(i)/len(i))
        length=len(i)
        x=sum(i)/length  #x is also a mean
        variance.append(sum((j - x) ** 2 for j in i)/length)
    

    【讨论】:

    • 您好谢谢您的回复!有什么方法可以在 for 循环之后将数组存储在列表中而无需手动执行?因为该数组提供了 1225 个元素,这些元素由...呈现。此外,我可能必须针对 10-20 个像素值运行 for 循环,这将返回大约 10-20 个数组。手动存储数组是不可能的。
    • 举一个例子,以便我可以更好地理解。
    • 对于范围 (10) 中的 i: x = pic[10,15+i];它为我提供了 10 个数组,例如每个数组中有 1225 个元素。我想计算每个元素的平均值而无需手动存储在列表中。
    • 1225 的值是特定的还是可以更改的(如果不可更改)您可以使用for 循环运行 1225 次并获取每个元素的平均值
    • 这是具体的。如果是1225特有的,请问具体怎么做?
    【解决方案2】:

    您可以按如下方式使用 numpy: 创建一个存储 5 个数组的数组,然后使用 numpy.mean() 函数:

    import numpy as np
    
    arrays = [
    [22, 23, 20, 32, 45, 0],
    [25, 23, 20, 33, 39, 0],
    [26, 23, 26, 31, 56, 0],
    [28, 23, 26, 0, 11, 0],
    [25, 34, 25, 0, 0, 0]]
    
    mean = np.mean(arrays, axis=0)
    variance = np.variance(arrays, axis=0)
    

    该轴指定您要按列而不是按行计算平均值。

    【讨论】:

    • 您好谢谢您的回复!有什么方法可以在 for 循环之后存储数组而无需手动执行?因为数组提供了 1225 个元素,这些元素由 ... 呈现,所以我可能还必须为 10-20 个像素值运行 for 循环,这将返回大约 10-20 个数组。手动存储数组是不可能的。
    • 上面的代码没有使用循环。均值数组包含所有按元素的平均值,方差数组包含所有按元素的方差。您可以使用 arrays.append(array) 将这 10-20 个数组添加到“arrays”数组。因此,如果您有 10-20 个阵列,则无需在此处进行任何手动操作。
    • 所以,如果你看一下 for i in range(5): x = pic[10,15+i];它提供了 5 个不同的数组。我尝试使用 arrays.append(array) 附加它。但它给了我这个错误“numpy.ndarray”对象没有属性“append”
    • 你能帮我如何附加 numpy 数组吗?
    • Numpy 的 append 工作方式不同,因为数组是不可变的。所以 new_arr = np.append(old_arr, add_arr) 您可以查看 numpy 文档以获取有关该函数的更多信息。
    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2021-06-10
    • 2015-12-26
    • 2021-12-19
    • 2012-05-08
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多