使用Numpy从矩阵中提取所有方形子矩阵

时间:2015-06-18 18:16:52

标签: python-2.7 numpy matrix submatrix

说我有一个NxN numpy矩阵。我正在寻找从这个矩阵中提取所有方块(子矩阵)的最快方法。意味着原始矩阵的所有CxC部分 0< C< N + 1 即可。子矩阵应对应于原始矩阵的连续行/列索引。我希望在尽可能短的时间内实现这一目标。

2 个答案:

答案 0 :(得分:0)

你可以使用Numpy切片,

<configuration>
    <system.web>
        <authentication mode="Forms">
            <forms loginUrl="~/Login" name=".ASPXFORMSAUTH" timeout="1440" />
        </authentication>
    </system.web>
</configuration>

避免Numpy中的循环,本身不是目标。只要你注意它,就不应该有太大的开销。

答案 1 :(得分:0)

足够棘手,但这里是一个在NxN矩阵中提取所有MxM子矩阵的例子。

import numpy as NP
import numpy.random as RNG

P = N - M + 1
x = NP.arange(P).repeat(M)
y = NP.tile(NP.arange(M), P) + x

a = RNG.randn(N, N)
b = a[NP.newaxis].repeat(P, axis=0)
c = b[x, y]
d = c.reshape(P, M, N)
e = d[:, NP.newaxis].repeat(P, axis=1)
f = e[:, x, :, y]
g = f.reshape(P, M, P, M)
h = g.transpose(2, 0, 3, 1)

for i in range(0, P):
    for j in range(0, P):
        assert NP.equal(h[i, j], a[i:i+M, j:j+M]).all()