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

news/2025/3/31 7:35:41/

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

  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° 格式时,偶数列确保中心对称。

简单的运行代码如下:

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, :)];

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

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

http://www.ppmy.cn/news/1583692.html

相关文章

LLM之Agent(十四)| 字节开源ComputerUse纯视觉驱动GUI 智能体模型 UI-TARS

Agent TARS 是字节跳动于 2025 年 3 月开源的多模态 AI 智能体,它能够像人类一样操作电脑、手机和网页,完成各种复杂任务。以下是其详细介绍: 一、简介 Agent TARS 是一款开源的多模态 AI 智能体,能够基于视觉理解网页内容&#…

高效内存管理:x86-64架构中的分页机制

在 x86-64 架构的世界里,内存分页机制扮演着举足轻重的角色,它就像是一座桥梁,连接着虚拟地址与物理地址。简单来说,内存分页机制就是将线性地址(也就是虚拟地址)切分成一个个固定大小的页,并把…

稳健投资新标杆,云济会布局国库券回购助推金融市场优化

【2025年3月21日】近日,云济会正式宣布启动其首个国库券回购计划,引发业内外广泛关注。这一举措被视为云济会积极响应国家经济战略、助推新中产财富管理升级的重要一步,也标志着新中产资本正以更高效、更稳健的方式深度融入国家金融体系。 据…

常见邮件协议

常见邮件协议 SMTP(发),POP3(收),IMAP(收) 发邮件:SMTP(加密版本SMTPS) SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系…

性能测试、负载测试、压力测试的全面解析

在软件测试领域,性能测试、负载测试和压力测试是评估系统稳定性和可靠性的关键手段。​它们各自关注不同的测试目标和应用场景,理解这些差异对于制定有效的测试策略至关重要。 本文对性能测试、负载测试和压力测试进行深入分析,探讨其定义、…

基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

基于HTML的邮件发送状态查询界面设计示例

以下是一个基于HTML的邮件发送状态查询界面设计示例&#xff0c;结合筛选功能、状态展示和重新发送操作&#xff0c;采用Bootstrap框架实现响应式布局&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"&…

Spring Boot 自动装配原理深度解析:从源码到实战

Spring Boot 自动装配原理深度解析&#xff1a;从源码到实战 Spring Boot 自动装配&#xff08;Auto-configuration&#xff09; 是 Spring Boot 的核心特性之一&#xff0c;它通过约定大于配置的思想&#xff0c;自动加载适合当前项目的 Spring 组件&#xff0c;让开发者无需手…