如何在Python中有效地执行大型矩阵的网格搜索?

时间:2014-02-16 00:49:37

标签: python performance algorithm numpy matrix

给定nxn矩阵A(它实际上是图的邻接矩阵),我需要查看该矩阵的所有可能的mxm子矩阵(在这种情况下m = 8),并将子矩阵传递给函数并收集其结果。

现在,我这样做:

# generate all possible 8x8 submatrices 
for w in itertools.combinations(range(n), m):
         # extract 8x8 submatrix from the matrix
         submatrix = A[np.ix_(list(w),list(w))]
         # do some work on the submatrix
         foo(submatrix)

问题是:上面的代码可以很好地工作到n = 30x30矩阵(有大约500万个可能的m = 8x8子矩阵来搜索)。但是,我想将我的算法应用到最多n = 100x100矩阵,这意味着(100选择8)= 1860亿可能的子矩阵。

我能更快地完成这个过程吗?还是要解决这个绝对难以解决的问题?

1 个答案:

答案 0 :(得分:0)

import numpy as np
from scipy.ndimage import generic_filter

m = np.arange(100*100).reshape((100,100))

def myfunction(data):
    mean = np.mean(data)
    return mean 

%timeit results = generic_filter(m, myfunction, size=8)
#10 loops, best of 3: 96.6 ms per loop

使用scipy.ndimage的generic_filter解决方法