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