【Matlab笔记_22】Matlab地图矩阵左右置换

有时候需要对矩阵进行左右置换,而非左右翻转,如地理经度数据重组,可以通过以下简单的代码实现

  1. 计算列数

    matlab 复制代码
    numCols = size(A, 2);

    获取输入矩阵 A 的列数,结果保存在 numCols 变量中。

  2. 确定中间列索引

    matlab 复制代码
    midCol = ceil(numCols / 2);

    通过向上取整计算中间列的索引。例如:

    • 若列数为5,midCol = 3(中间列是第3列)。
    • 若列数为6,midCol = 3(将列分为前3列和后3列)。
  3. 交换左右部分

    matlab 复制代码
    A = [A(:, midCol+1:end, :), A(:, 1:midCol, :)];

    将原矩阵从中间列分为左右两半,并交换位置:

    • 右半部分midCol+1 到最后一列(A(:, midCol+1:end, :))。
    • 左半部分 :第1列到 midCol 列(A(:, 1:midCol, :))。
    • 最终结果 A 是右半部分在前,左半部分在后的拼接矩阵。

举例

  • 奇数列(如5列)
    原列顺序 [1, 2, 3, 4, 5] → 交换后为 [4, 5, 1, 2, 3]
  • 偶数列(如6列)
    原列顺序 [1, 2, 3, 4, 5, 6] → 交换后为 [4, 5, 6, 1, 2, 3]

注意

该方法需要注意地图经纬是否为偶数,在一定程度上,偶数的置换才能确保0和360的经度能贴合,将 0°~360° 数据转换为 -180°~180° 格式时,偶数列确保中心对称。

简单的运行代码如下:

bash 复制代码
numCols = size(A, 2);  % 获取输入矩阵列数

% 检查列数是否为偶数
if mod(numCols, 2) ~= 0
    % 弹出对话框询问是否继续
    answer = questdlg('当前矩阵列数为奇数,中间列将会被移动得到最后一列,是否继续执行交换?', ...
                     '列数奇偶性警告', ...
                     '继续', '取消', '取消'); % 默认选项为"取消"
    
    % 根据用户选择决定是否终止程序
    if strcmp(answer, '取消')
        error('用户终止操作:列数必须为偶数以安全交换数据。');
    end
end
a=1
% 执行列交换操作
midCol = ceil(numCols / 2);
A= [A(:, midCol+1:end, :), A(:, 1:midCol, :)];

为了方便代码简洁,可以将其封装非一个函数,需要的时候扔进去矩阵调用函数就可以

bash 复制代码
function A = SwapColumns(A)
% 函数功能:交换矩阵的左右半部分,处理奇数列情况
% 输入参数:
%   A - 二维或三维矩阵(支持多通道数据,第三维度为通道)
% 输出参数:
%   A - 处理后的矩阵,左右半部分已交换。奇数列时中间列移至末尾
% 编写日期:2025-3-22
% 作者:zhuzy

numCols = size(A, 2);  % 获取矩阵列数

% 检查列数奇偶性
if mod(numCols, 2) ~= 0
    % 弹窗提示中间列移动行为
    answer = questdlg('当前矩阵列数为奇数,中间列将会被移动至最后一列,是否继续执行交换?',...
                     '列数奇偶性警告',...
                     '继续', '取消', '取消');
    
    % 根据用户选择控制流程
    if strcmp(answer, '取消')
        error('用户终止操作:列数必须为偶数以安全交换数据。')
    end
end

% 计算中间列并执行交换
midCol = ceil(numCols / 2);
A = [A(:, midCol+1:end, :), A(:, 1:midCol, :)];

end
相关推荐
2501_926978332 小时前
“LLM的智能本质--AGI的可能路径--人类的意识本质”三者的统一基底(5.0理论解读)
人工智能·经验分享·笔记·深度学习·机器学习·ai写作·agi
bulingg2 小时前
L1与L2正则化的差异
线性代数·矩阵·概率论
لا معنى له2 小时前
WAM与AC-WM:具身智能时代的世界动作模型与动作条件世界模型
人工智能·笔记·学习
Wilber的技术分享4 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
愚昧之山绝望之谷开悟之坡4 小时前
合格境外投资者
笔记
智算菩萨6 小时前
【OpenGL】10 完整游戏开发实战:基于OpenGL的2D/3D游戏框架、物理引擎集成与AI辅助编程指南
人工智能·python·游戏·3d·矩阵·pygame·opengl
寒秋花开曾相惜6 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
_李小白7 小时前
【AI大模型学习笔记之平台篇】第五篇:Trae常用模型介绍与性能对比
人工智能·笔记·学习
承渊政道7 小时前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
Frostnova丶7 小时前
LeetCode 2573. 找出对应 LCP 矩阵的字符串
算法·leetcode·矩阵