【发布时间】:2017-01-18 16:28:18
【问题描述】:
我想以“pythonic”的方式将 3D numpy 数组拆分为 3D 块。我正在处理有点大的数组(1000X1200X1600)的图像序列,所以我需要将它们分成几块来进行处理。
我已经编写了函数来执行此操作,但我想知道是否有本地 numpy 方法来完成此操作 - numpy.split 似乎没有为 3D 数组做我想要的(但也许我不了解它的功能)
明确一点:下面的代码完成了我的任务,但我正在寻找一种更快的方法来完成它。
def make_blocks(x,t):
#x should be a yXmXn matrix, and t should even divides m,n
#returns a list of 3D blocks of size yXtXt
down = range(0,x.shape[1],t)
across = range(0,x.shape[2],t)
reshaped = []
for d in down:
for a in across:
reshaped.append(x[:,d:d+t,a:a+t])
return reshaped
def unmake_blocks(x,d,m,n):
#this takes a list of matrix blocks of size dXd that is m*n/d^2 long
#returns a 2D array of size mXn
rows = []
for i in range(0,int(m/d)):
rows.append(np.hstack(x[i*int(n/d):(i+1)*int(n/d)]))
return np.vstack(rows)
【问题讨论】:
-
您的缩进已关闭。给定一个
(1000X1200X1600)数组,你想要什么大小的块?np.split仅适用于一维。我猜,在不研究你的函数的情况下,你想分成 2 或 3 个维度。 -
你的猜测是正确的,我想要由我的 (1000X1200X1600) 数组组成的更小的 3D 数组,例如块大小(1000X50X50)。似乎 numpy 中应该有一个函数可以做到这一点......
标签: performance python-2.7 numpy memory-efficient