用matlab读出几组数据,每组数据包含三个矩阵,经度,纬度和温度,但是每组矩阵的大小不同,矩阵排列没有规律,三个数据的关联是靠位置对应,即温度矩阵的第一个元素的坐标为(经度矩阵的第一个元素,纬度矩阵的第一个元素),现在想要查找每组数据中经纬度相同的点,对该点的温度求取平均值。
入门玩家一枚,感觉可以通过循环筛选经度相同且纬度相同的值,但此时要如何确定所对应的温度呢?
希望在此领域深耕的各位同仁们(因为有词被禁了 我换个说法)能给思路,或者简单的代码,感激不尽
Matlab怎么求多个不对应矩阵的平均值
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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);
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥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控制对比,提现前者优势