1
次の問題を解決するには、あなたの助けが必要です。 Column1は整数によるグループ化を示します。一致するグループ番号(Col1)のマトリックスに、Col2の非ナノ値を挿入する必要があります。一致するID(MATLAB)の行列内の値を繰り返します
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ループで実行されています。グループ内に複数のnon-nan値(col2)が存在することはありません(マット内)。ありがとう!それがすべてです場合、それはNaN
1がある場合以外NaN
値を返す、またはになるので、私は、ここでは便宜上機能MINを使用
values = accumarray(mat(:,1),mat(:,2),[],@min);
mat(:,2) = values(mat(:,1));
:ACCUMARRAYを使用して
ありがとうございました!私は本当にaccumarrayで快適にする必要があります! – Maddy
@Maddy:説明は完全ではありません:同じグループ(異なる値)に複数のnon-nan値があった場合、同じグループのnanを置き換えるのに 'min'を使いますか? – Amro
@Amro - それを指摘してくれてありがとう。私はQを編集しました。グループ内に複数のnon-nan値を入れることはできません。実際の生活では、これらの価値は月末の為替レートです。グループは先月中旬から翌月の(中1)日に作成されます。 Gnoviceのコードから '@ min'を削除すべきですか?私は積み荷の力をあまり知らない。 – Maddy