Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中计算大型矩阵(平均过滤器)每个坐标的有效局部平均值_Python_Arrays_Matrix_Local_Average - Fatal编程技术网

如何在python中计算大型矩阵(平均过滤器)每个坐标的有效局部平均值

如何在python中计算大型矩阵(平均过滤器)每个坐标的有效局部平均值,python,arrays,matrix,local,average,Python,Arrays,Matrix,Local,Average,我有一个大矩阵,4000x4000 我需要计算这个矩阵的每个x,y的11x11窗口的局部平均值 一般来说,它一定是这样的 for x in range(4000) for y in range(4000) b[x,y]=mean(a[x-5:x+5,y-5:y+5] 但这将运行很多时间 这是更有效的方法吗? 谢谢 您基本上需要一个二维卷积。Scipy可以为您做到这一点: 事实上,这里也有类似的答案,所以: 您可以使用动态编程技术使其速度快很多倍。通过从左上角开始,从左到右移动,然后

我有一个大矩阵,4000x4000 我需要计算这个矩阵的每个x,y的11x11窗口的局部平均值 一般来说,它一定是这样的

for x in range(4000)
  for y in range(4000)
    b[x,y]=mean(a[x-5:x+5,y-5:y+5]
但这将运行很多时间 这是更有效的方法吗?
谢谢

您基本上需要一个二维卷积。Scipy可以为您做到这一点:

事实上,这里也有类似的答案,所以:

您可以使用动态编程技术使其速度快很多倍。通过从左上角开始,从左到右移动,然后从上到下,预处理矩阵,将每个单元格设置为其值与上面的单元格(如果存在)和左边的单元格(如果存在)之和。当到达末尾时,右下角的值应该是整个矩阵的总和

for x in xrange(4000):
    for y in xrange(4000):
        c[x,y] = a[x,y]
        if x > 0:
            c[x,y] += c[x-1,y]
        if y > 0:
            c[x,y] += c[x,y-1]
现在你可以通过从右上角减去左上角得到任意矩形区域的和:例如,在这种情况下,11x11区域的和将是

c[x+5,y+5]-c[x-5,y-5]
然后,您只需除以窗口的大小即可得到局部平均值:

b[x,y] = (c[x+5+,y+5]-c[x-5,y-5])/121

现在,不必对矩阵中的每个元素迭代121个点,只需对矩阵进行2次遍历,而不对每个元素进行迭代。

您不希望在Python代码中执行此计算。numpy可能可以做到这一点,但他们的页面目前速度非常慢。你试过使用xrange吗?你需要多大的效率?