我需要你帮助解决以下问题。 Column1显示整数分组。 Col2中的任何非nan值都应插入矩阵中以匹配groupnumber(Col1)。
mat = [ ...
1 nan
1 0.1
1 nan
1 nan
2 nan
2 nan
2 nan
3 0.5
4 nan
4 nan
4 nan
5 0.2
5 nan ] ;
ans = [ ...
1 0.1
1 0.1
1 0.1
1 0.1
2 nan
2 nan
2 nan
3 0.5
4 nan
4 nan
4 nan
5 0.2
5 0.2 ] ;
请推荐矢量化方法。数据量很大,并且已经在for循环中运行。组内(垫子中)永远不会有多个非纳米值(col2)。谢谢!
答案 0 :(得分:1)
使用ACCUMARRAY的解决方案将实现您的目标:
values = accumarray(mat(:,1),mat(:,2),[],@min);
mat(:,2) = values(mat(:,1));
我在这里使用函数MIN是为了方便,因为如果有的话,它将返回非NaN
值,如果有,则返回NaN
。它比使用函数ISNAN检查任何非NaN
值所涉及的逻辑更简单。您实际上也可以使用函数MAX,因为在这种情况下它的行为方式相同。