【发布时间】:2013-08-18 04:36:48
【问题描述】:
我正在寻找一种有效的方法来对更大的矩阵执行子矩阵运算,而无需使用 for 循环。
我目前正在进行操作(对于 3x3 窗口):
newMatrix = numpy.zeros([numRows, numCols])
for i in range(1, numRows-1):
for j in range(1, numCols-1):
sub = matrix[i-1:i+2, j-1:j+2]
newMatrix[i][j] = ... #do things with sub matrix
这比使用 numpy 矩阵的正常操作要慢得多。有什么 numpy 可以解决这个问题,还是希望太高?
编辑: 具体例子
xWeight = numpy.array([[-1./8, 0, 1./8], [-2./8, 0, 2./8], [-1./8, 0, 1./8]])
yWeight = numpy.array([[1./8, 2./8, 1./8], [0, 0, 0], [-1./8, -2./8, -1./8]])
内循环:
dz_dx = numpy.sum(xWeight * sub)
dz_dy = numpy.sum(yWeight * sub)
【问题讨论】:
-
您是否尝试使用 numpy 进行图像处理?
-
第4行的
matrix应该是newMatrix吗? -
“用子矩阵做事”到底是做什么的?如果您不指定您在做什么,我们将无法帮助您矢量化您的代码。
-
吉姆:不,但我想有交叉。 Brionius:不,是从旧矩阵中提取子矩阵。 Viktor:我故意含糊其辞,因为我正在寻找有关此类问题的一般指导,其中有几个,而不是寻找特定的解决方法。但例如查看编辑。
-
dz元素去哪了? Stackoverflow 真正以离散示例和特定修复为中心。