所以我现在有大约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再次执行该操作。当然,必须有一个更快的方法。干杯
答案 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的性能很多