重复值的行组合
2次观看(最近30天)
显示较旧的评论
你好,
对于不同的深度,我有不同的变量(日期,时间,LAT,LON)和X,其中每列代表不同深度的n次(不同深度的数量)相同的变量,让人说0 m,100 m,100 m,500 m。这里是一个更明确的示例:
a = [20200101,Nan,Nan,1200,Nan,Nan,90,Nan,Nan,45,Nan,Nan,2,Nan,Nan,Nan;%0 m
Nan,20200101,Nan,Nan,1200,Nan,Nan,90,Nan,Nan,45,Nan,Nan,3,3,Nan;%100 m
Nan,Nan,20200101,Nan,Nan,1200,Nan,Nan,90,Nan,Nan,45,Nan,Nan,Nan,4];%500 m
如何将重复的频段组合保持在日期,时间,纬度和经度,因此我的最终输出将是每个唯一的日期 /时间 / lat / lon:
b = [20200101,1200,90,45,2,3,4];%日期 /时间 / lat / lon / val 0m / val100m / val500m
我正在考虑使用一个for loop with find
查找(a(i,1)== a(::,2)&a(i,1)== a(::,3)等)
但是,如果我有50个不同的深度,那将是很多组合。有人有更简单的方法吗?
干杯
答案(1)
Spencer Chen
2020年2月21日
现在,您对列结构并不十分清楚。我像以下内容一样了解:
a = [date.depth1,date.depth2 .. date.depthntime,lat.depth1,lat.depth2 .. lat.depthn等]
%a =行x(深度和var)
如果是这样,那么此类代码会解决您的问题:
nrows = size(a,1);
ndepth = 3;
a2 = reshape(a,nrows,ndepth,[]);%a2 =行x depth x var
b =挤压(nansum(a2,2));
它的关键是使用nansum()结合和忽略其他深度的值。因此,我们重组矩阵,因此我们可以使用nansum()。
祝福,
斯宾塞