不知道为什么老是违反规定改不了名字 2022-08-30 22:07 采纳率: 33.3%
浏览 65
已结题

Matlab怎么求多个不对应矩阵的平均值

用matlab读出几组数据,每组数据包含三个矩阵,经度,纬度和温度,但是每组矩阵的大小不同,矩阵排列没有规律,三个数据的关联是靠位置对应,即温度矩阵的第一个元素的坐标为(经度矩阵的第一个元素,纬度矩阵的第一个元素),现在想要查找每组数据中经纬度相同的点,对该点的温度求取平均值。
入门玩家一枚,感觉可以通过循环筛选经度相同且纬度相同的值,但此时要如何确定所对应的温度呢?
希望在此领域深耕的各位同仁们(因为有词被禁了 我换个说法)能给思路,或者简单的代码,感激不尽

  • 写回答

1条回答 默认 最新

  • 胸毛男 2022-08-31 00:10
    关注

    我觉得有两个步骤需要注意。
    第一要排序,第二要筛选一样的并且记录每种一样的个数。
    一、先要把每组三个对应矩阵,整理整理成一个N行3列的矩阵Mat1,此时就没有组的影响了
    二、用sortrows对纬度从小到大排序,再用sortrows对经度从小到大排序,这样相同坐标就挨着了。
    三、这个排好序的N行3列矩阵Mat2,一行一行提出来,塞到Mat3里,如果和上一次塞的一条数据,经度纬度都相同,就说明是同一个数据,和上一条加起来,并且计数加1,
    四、Mat3第三列温度数据除以它的第四列计数数据,再只要它的前3列数据就得到想要的结果了。

    
    % 模拟数据 ABC三组 其中B组坐标与A组部分相同
    A_JingDu=rand(5,5);
    A_WeiDu=rand(5,5);
    A_WenDu=rand(5,5);
    
    B_JingDu=A_JingDu(1:2,:);
    B_WeiDu=A_WeiDu(1:2,:);
    B_WenDu=rand(2,5);
    
    C_JingDu=rand(7,5);
    C_WeiDu=rand(7,5);
    C_WenDu=rand(7,5);
    %Mat1 所有整理成N行3列的数据
    All_JingDu_WeiDu_WenDu=[];
    
    [row,col]=size(A_JingDu);
    for i=1:1:row
        for j=1:1:col
            All_JingDu_WeiDu_WenDu=[All_JingDu_WeiDu_WenDu;A_JingDu(i,j),A_WeiDu(i,j),A_WenDu(i,j)];
        end
    end
    
    [row,col]=size(B_JingDu);
    for i=1:1:row
        for j=1:1:col
            All_JingDu_WeiDu_WenDu=[All_JingDu_WeiDu_WenDu;B_JingDu(i,j),B_WeiDu(i,j),B_WenDu(i,j)];
        end
    end
    
    [row,col]=size(C_JingDu);
    for i=1:1:row
        for j=1:1:col
            All_JingDu_WeiDu_WenDu=[All_JingDu_WeiDu_WenDu;C_JingDu(i,j),C_WeiDu(i,j),C_WenDu(i,j)];
        end
    end
    
    %排序,按照经度从小到大,经度相同就纬度从小到大 得到Mat2
    All_JingDu_WeiDu_WenDu = sortrows(All_JingDu_WeiDu_WenDu,2);
    All_JingDu_WeiDu_WenDu = sortrows(All_JingDu_WeiDu_WenDu,1);
    
    %合并相同经纬度,还带计数 Mat3
    All_JingDu_WeiDu_WenDu_Count=[];
    [row,col]=size(All_JingDu_WeiDu_WenDu);
    
    k=0;%是塞进Mat3的条数
    for i=1:1:row
    %取出一条
        temp_JingDu_WeiDu_WenDu = All_JingDu_WeiDu_WenDu(i,:);
        if(isempty(All_JingDu_WeiDu_WenDu_Count))
            All_JingDu_WeiDu_WenDu_Count=[All_JingDu_WeiDu_WenDu_Count;[temp_JingDu_WeiDu_WenDu,1]];
            k=k+1;
        elseif(temp_JingDu_WeiDu_WenDu(1,1)==All_JingDu_WeiDu_WenDu_Count(k,1) &&temp_JingDu_WeiDu_WenDu(1,2)==All_JingDu_WeiDu_WenDu_Count(k,2) )
            All_JingDu_WeiDu_WenDu_Count(k,3)=All_JingDu_WeiDu_WenDu_Count(k,3)+temp_JingDu_WeiDu_WenDu(1,3);%该相同经纬度加和
            All_JingDu_WeiDu_WenDu_Count(k,4)=All_JingDu_WeiDu_WenDu_Count(k,4)+1; %计数加1
            else
            All_JingDu_WeiDu_WenDu_Count=[All_JingDu_WeiDu_WenDu_Count;[temp_JingDu_WeiDu_WenDu,1]];
            k=k+1;
        end
    end
    
    % 温度除以计数 得到结果Mat4  All_JingDu_WeiDu_pingjunWenDu
    All_JingDu_WeiDu_pingjunWenDu=All_JingDu_WeiDu_WenDu_Count;
    All_JingDu_WeiDu_pingjunWenDu(:,3)=All_JingDu_WeiDu_WenDu_Count(:,3)./All_JingDu_WeiDu_WenDu_Count(:,4);
    All_JingDu_WeiDu_pingjunWenDu = All_JingDu_WeiDu_pingjunWenDu(:,1:3);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月9日
  • 已采纳回答 9月1日
  • 创建了问题 8月30日

悬赏问题

  • ¥15 能给我一些人生建议吗
  • ¥15 mac电脑,安装charles后无法正常抓包
  • ¥18 visio打开文件一直显示文件未找到
  • ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
  • ¥30 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!
  • ¥50 怎么获取Ace Editor中的python代码后怎么调用Skulpt执行代码
  • ¥30 fpga基于dds生成幅值相位频率和波形可调的容易信号发生器。
  • ¥15 R语言shiny包和ncdf4包报错
  • ¥15 origin绘制有显著差异的柱状图和聚类热图
  • ¥20 simulink实现滑模控制和pid控制对比,提现前者优势