nan值替换为其他单元阵列的意思

1视图(30天)
考虑下面的例子:
Jday = datenum (“2007-01-01 00:00”,“yyyy-mm-dd HH: MM”):1:
datenum (“2009-12-31点”,“yyyy-mm-dd HH: MM”);
Jday2 = datenum (“2008-01-01 00:00”,“yyyy-mm-dd HH: MM”):1:
datenum (“2010-12-31点”,“yyyy-mm-dd HH: MM”);
数据{1}= [Jday; 1 +(长度(Jday) 1)。*兰德(1,长度(Jday))) ';
数据{2}= [Jday2; 1 +(长度(Jday) 1)。*兰德(1,长度(Jday))) ';
数据{3}= [Jday; 1 +(长度(Jday) 1)。*兰德(1,长度(Jday))) ';
i = 1:长度(数据);
地板d_nan{我}=(1 +(长度(Jday) 1)。*兰德(1100));
结束
i = 1:长度(数据);
(我)=长度(d_nan{我});
2 = 1:(i);
数据我{}(d_nan{我}(ii), 2) =南;
结束
结束
在这个例子中我有一个单元阵列的数据包含三个细胞阵列,每个单元格数组的第一列包含的朱利安日期第二列中的值。有许多nan值在每个单元阵列。我想替换每个单元中的nan值数组中的值的平均值的其他细胞特定的朱利安日期。我的问题是复杂的三细胞不显示数据在同一时间(虽然数据{1},{3}数据有相同的天。)如果朱利安日期是相同的三个单元格之间的这个问题可以得到解决,通过使用isnan找到nan的位置然后替换这些行nanmean的其他行(在其他细胞)。
有人能提出一个有效的方法解决这个问题吗?谢谢你的时间

接受的答案

塞德里克Wannaz
塞德里克Wannaz 2013年1月29日
编辑:塞德里克Wannaz 2013年1月29日
你可以建立一个解决方案基于以下:
%——建立一个查找表,每个JDay associates的数据
%在所有其他jday相同。
堆叠= vertcat(数据{:});
flag_nan = isnan(堆叠(:,2));
缓冲=堆叠(~ flag_nan:);
我=缓冲区(:1);J = 1(大小(缓冲区,1),1);n = max(堆叠(:1));
spmean =稀疏(I, J,缓冲(:,2),n, 1)。*
spfun (@ (x) 1。/ x,稀疏(I, J, 1, n, 1));
%——更新南数据与相关的意思。
2 = 1:长度(数据)
{2}flag_nan = isnan(数据(:,2));
{二}数据(flag_nan 2) = spmean ({2} (flag_nan, 1)的数据,1);
结束
或者,如果你能负担得起的循环在南条目,你可以简单的:
堆叠= vertcat(数据{:});
isnan_stacked = isnan(堆叠(:,2));
2 = 1:长度(数据)
{2}isnan_data = isnan(数据(:,2));
idx_nan =找到(isnan_data);
jj = 1:元素个数(idx_nan)
isvalid =堆叠(:1){2}= =数据(idx_nan (jj), 1) & ~ isnan_stacked;
{二}数据(idx_nan (jj), 2) =意味着(堆叠(isvalid, 2));
结束
结束
欢呼,
塞德里克

更多的答案(0)

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!