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

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 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line