Numpy scale 3D阵列

2024-10-01 07:47:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个3D数组缩放到64x64x64(从一个更大的,非立方体大小),保持纵横比。在

我在二维数组中也做过同样的事情:

pad = Input.size[1]-Input.size[0]
padLeft = math.ceil(pad/2)
padRight = math.floor(pad/2)

if(pad > 0):
    paddedInput = np.pad(Input, ((0,0), (padLeft,padRight)), 'constant', constant_values=(0,0))
else:
    paddedInput = np.pad(Input, ((math.fabs(padLeft),math.fabs(padRight)), (0,0)), 'constant', constant_values=(0,0))

Output = misc.imresize(paddedInput,(InputHeight,InputHeight))

有没有办法在N(=3)维上实现同样的目标?在

编辑:我尝试转换为3D:

^{pr2}$

这是运行,但得到填补的维度是填补他们需要的两倍数量。。。在


Tags: inputsizenpmath数组事情valuespad
2条回答

答案是使用pad然后numpy.ndarray.resize大小():

pad = np.zeros((3,1))
pad[0,0] = max(Input.shape) - Input.shape[0]
pad[1,0] = max(Input.shape) - Input.shape[1]
pad[2,0] = max(Input.shape) - Input.shape[2]

paddedInput = np.zeros((max(Input.shape),max(Input.shape),max(Input.shape)))

paddedInput = np.pad(Input, ((int(math.ceil(pad[0,0]/2)),
    int(math.floor(pad[0,0]/2))),(int(math.ceil(pad[1,0]/2)),
    int(math.floor(pad[1,0]/2))),(int(math.ceil(pad[2,0]/2)),
    int(math.floor(pad[2,0]/2)))), 'constant', constant_values=0)

paddedInput.resize((64,64,64))

在同一行上执行pad可以修复任何错误。在

看看scipy.ndimage中的zoom。这里提供了沿每个轴的缩放因子,而不是最终的立方体大小,但这很容易计算出来。在

inarr = np.ones((32,32,32))
outarr = ndimage.zoom(inarr, 2)
outarr.shape
(64, 64, 64)

相关问题 更多 >