【发布时间】:2020-09-11 19:19:18
【问题描述】:
我有一个大小为 (827,914) 的网格,我想从中提取所有可能的 (5,5) 网格。以下代码按预期工作:
import numpy as np
N = 827
M = 914
gsize = 5
tmp = np.random.normal(0,1,(N,M))
alldata = np.zeros([(tmp.shape[0] - gsize + 1) * (tmp.shape[1] - gsize + 1),gsize, gsize])
county = 0
for i in range(0,tmp.shape[0] - gsize + 1):
for j in range(0,tmp.shape[1] - gsize + 1):
for k in range(i,i+gsize):
for l in range(j,j+gsize):
alldata[county,k-i,l-j] = tmp[k,l]
county += 1
这将返回正确的数据和大小数组 (748930,5,5)。问题是这段代码需要大约 20-30 秒才能完成,并且希望有一些更精明/更快的东西。有什么想法吗?
【问题讨论】:
-
您可以使用 How to split a numpy array in fixed size chunks with and without overlap? :
view_as_windows(tmp,(5,5))获得 3D 阵列视图,这几乎是免费的。然后,您可以重新调整为所需的形状,但这会强制复制。