在矩阵中重复匹配ID的值(MATLAB)

时间:2011-07-22 19:43:14

标签: matlab matrix

我需要你帮助解决以下问题。 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)。谢谢!

1 个答案:

答案 0 :(得分:1)

使用ACCUMARRAY的解决方案将实现您的目标:

values = accumarray(mat(:,1),mat(:,2),[],@min);
mat(:,2) = values(mat(:,1));

我在这里使用函数MIN是为了方便,因为如果有的话,它将返回非NaN值,如果有,则返回NaN。它比使用函数ISNAN检查任何非NaN值所涉及的逻辑更简单。您实际上也可以使用函数MAX,因为在这种情况下它的行为方式相同。