You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需转换为图像,如何将(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:07:48