有没有更有效的方法来找到大量矩阵的平均值?

时间:2018-07-30 01:07:10

标签: python python-2.7 matrix

所以我现在有大约300个矩阵,这还不错,但是我想让我的代码在将来可重用,所以我想知道是否有一种更有效的方法来找到平均值。我拥有的矩阵是88x88,我想对它求平均的方法是最后得到一个矩阵,其中每个[i] [j]值是另一个矩阵中所有[i] [j]值的平均值300个矩阵。

mean = []
smaller = []


for j in range(88):
        for i in range(88):
            for k in range(len(listof_matrices)):
                smaller.append(listof_matrices[k][i][j])
                mean.append(str(float(sum(smaller))/float(len(smaller))))

基本上,代码的工作方式是3个嵌套循环(我知道...),该循环首先将所有[k]个矩阵中单个[i] [j]位置的值附加起来,找到平均值,然后将其添加到平均值中列出存储它的列表,然后对所有i和所有j再次执行该操作。当然,必须有一个更快的方法。干杯

2 个答案:

答案 0 :(得分:3)

绝对使用numpy。我会用一个可复制的示例向您解释

Setup

m1 = np.array([[3, 6, 2], [5, 6, 3], [2, 7, 2]])
m2 = np.array([[1, 5, 7], [9, 9, 8], [1, 6, 6]])
m3 = np.array([[9, 8, 3], [3, 5, 4], [7, 3, 3]])
list_of_matrices = [m1, m2, m3]

Solution

然后只使用np.mean

np.mean(list_of_matrices, axis=0)

输出

array([[4.33333333, 6.33333333, 4.        ],
       [5.66666667, 6.66666667, 5.        ],
       [3.33333333, 5.33333333, 3.66666667]])

因此,在您的示例中,您可能唯一要做的loop是创建list_of_matrices,无论如何您都必须这样做。然后,您只需调用np.mean,它将使用矢量化解决方案生成均值矩阵。时序将比您的“三嵌套循环”方法快得多。

答案 1 :(得分:0)

您实际上应该将numpy用于这些目的。

假设您将矩阵放在单个numpy数组中。示例:

import numpy as np

matrix = np.array([
    [
        [1, 2],
        [3, 4]
    ],
    [
        [5, 6],
        [7, 8]
    ],
    [
        [9, 10],
        [11, 12]
    ],
])

您只需得到平均值即可

np.sum(matrix, axis=0)/float(matrix.shape[0])

因为np.sum(matrix, axis=0)沿其最外轴对所有数组求和,而matrix.shape[0]为您提供其中包含的矩阵数量。

numpy的性能也比原始python的性能很多