无需转换为图像,如何将(137,236)形状数组调整为(128,128)?
当然可以直接调整数组尺寸,不用转图像!
完全不需要把数组转成图像格式再折腾,直接用数值计算工具就能搞定(137,236)到(128,128)的尺寸调整,下面给你几个实用的方案:
方案1:用Scipy的插值工具(最适合普通数值数组)
Scipy的ndimage.zoom是专门用来缩放多维数组的工具,支持多种插值方法,全程都是对数值矩阵操作,完全不碰图像格式:
import numpy as np from scipy.ndimage import zoom # 假设你的原数组是arr,形状(137,236) arr = np.random.rand(137, 236) # 替换成你的实际数组 # 计算两个维度的缩放比例:目标尺寸/原尺寸 scale_factors = (128 / 137, 128 / 236) # 执行缩放,order参数控制插值方式 # order=0:最近邻插值(速度快,适合离散值场景) # order=1:双线性插值(平滑过渡,适合连续数值) # order=3:双三次插值(更精细,计算成本稍高) resized_arr = zoom(arr, scale_factors, order=1) print(resized_arr.shape) # 输出 (128, 128)
方案2:用深度学习框架的插值(如果是张量场景)
如果你在做深度学习,手里的数组是PyTorch/TensorFlow张量,直接用框架自带的插值方法更方便,全程都是张量操作,不用转图像:
PyTorch示例:
import torch # 把numpy数组转成张量,需要增加batch和通道维度(框架要求) input_tensor = torch.tensor(arr).unsqueeze(0).unsqueeze(0) # 形状变为(1, 1, 137, 236) # 调整尺寸,支持bilinear/nearest等方法 resized_tensor = torch.nn.functional.interpolate( input_tensor, size=(128, 128), mode='bilinear', align_corners=False ) # 转回numpy数组(如果需要的话) resized_arr = resized_tensor.squeeze().numpy()
TensorFlow示例:
import tensorflow as tf # 转换为TensorFlow张量,增加batch和通道维度 input_tensor = tf.convert_to_tensor(arr)[tf.newaxis, tf.newaxis, ...] # 调整尺寸 resized_tensor = tf.image.resize( input_tensor, size=(128, 128), method='bilinear' ) # 转回numpy数组 resized_arr = tf.squeeze(resized_tensor).numpy()
重要提醒:别用NumPy的resize!
很多人会想到np.resize,但它只是简单地重复或截断元素来凑够目标形状,不会做插值,结果会严重失真,绝对不适合你的需求。
内容的提问来源于stack exchange,提问作者NoLand'sMan
相关产品推荐
相关产品推荐

