我希望以一种“Pythonic”的方式将3D numpy数组拆分为3D块。 我正在处理相当大的图像序列数组(1000X1200X1600),因此需要将它们分成几个部分进行处理。
我已编写了函数来执行此操作,但我想知道是否有一种本地numpy方法可以实现此操作 - numpy.split似乎不能满足我的要求(但也许我不理解其功能)。
明确一下:下面的代码完成了我的任务,但我正在寻求更快的方法来完成它。
我已编写了函数来执行此操作,但我想知道是否有一种本地numpy方法可以实现此操作 - numpy.split似乎不能满足我的要求(但也许我不理解其功能)。
明确一下:下面的代码完成了我的任务,但我正在寻求更快的方法来完成它。
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 个维度上进行分割。 - hpaulj