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

如何在MATLAB中缩放表示函数值的二维矩阵得到f(x/s,y/s)?

MATLAB矩阵按整数因子缩放实现方案

首先明确原矩阵与缩放后矩阵的尺寸关系:要得到包含f(x/s, y/s)的矩阵M2,相当于将原函数的坐标分辨率提升s倍,因此M2的行数为原矩阵行数×s,列数为原矩阵列数×s。

一、不需要插值(允许补0)的实现

直接将原矩阵的每个元素映射到缩放后矩阵的对应间隔位置,其余位置填充0即可,代码如下:

originalMatrix = magic(10);
s = 2; % 整数缩放因子
[rows, cols] = size(originalMatrix);

% 初始化全0的缩放矩阵,尺寸为原矩阵的s倍
scaledMatrix = zeros(rows*s, cols*s);

% 将原矩阵元素放到缩放矩阵的s间隔位置(对应f(x/s,y/s)的整数坐标点)
scaledMatrix(1:s:end, 1:s:end) = originalMatrix;

代码说明:1:s:end会选取缩放矩阵中第1、1+s、1+2s…的行和列,刚好对应原矩阵每个元素的映射位置,其余未赋值的位置保持0。

二、需要插值的实现

若要对非整数坐标的位置填充插值结果,可使用MATLAB内置的interp2函数,支持多种插值方法:

  • 'nearest':最近邻插值
  • 'linear':线性插值(默认)
  • 'cubic':三次插值
  • 'spline':样条插值

示例代码(以线性插值为例):

originalMatrix = magic(10);
s = 2;
[rows, cols] = size(originalMatrix);

% 生成原矩阵的坐标网格
[xOrig, yOrig] = meshgrid(1:cols, 1:rows);

% 生成缩放后的目标坐标网格,步长为1/s,保证分辨率提升s倍
[xScaled, yScaled] = meshgrid(1:1/s:cols, 1:1/s:rows);

% 执行插值,替换方法参数即可切换插值类型
scaledMatrix = interp2(xOrig, yOrig, originalMatrix, xScaled, yScaled, 'linear');

三、MATLAB内置缩放方法

除了手动实现,还可以使用imresize函数(原本用于图像处理,但适配一般矩阵),直接指定缩放因子和插值方法:

originalMatrix = magic(10);
s = 2;

% 放大s倍,使用线性插值
scaledMatrix = imresize(originalMatrix, s, 'linear');

% 若用最近邻插值:
% scaledMatrix = imresize(originalMatrix, s, 'nearest');

注:imresize的缩放因子大于1时为放大,小于1时为缩小,输出矩阵尺寸会自动匹配缩放比例。

内容的提问来源于stack exchange,提问作者requiemman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:23:38