私は行列を持っているとします
A = [1 2 3 1 1 1 2 3]
数値がマトリックスに出現した回数を見つけたい。この i/p の出力行列は次のようになります。
B = [1 1 1 2 3 4 2 2]
つまり、配列に 1 が 4 回出現したため、1 に対応する最後の値は 4 です。
unique
要素が発生した合計回数が得られるため、sum unique
役に立ちませんが、発生するたびにカウントを増やす別のマトリックスが必要です。
これは、次のコードを使用して非常に簡単に行うことができます。これは、行列 A が 1 次元であると仮定しますが、これは大げさな仮定ではありません。
A=[1 2 3 1 1 1 2 3];
vals = unique(A);
B = zeros(size(A));
for i = 1:numel(vals)
idxs = find(diff([0,cumsum(A == vals(i))]));
B(idxs) = 1:numel(idxs);
end
このソリューションは、R ではなく MATLAB 用です。どちらが必要かわかりません。Rの回答が必要な場合は、他の人の回答のいずれかをお勧めします:)
マトラブの場合:
B = sum(tril(repmat(A,length(A),1)).' + tril(repmat(NaN,length(A),length(A)),-1) == repmat(A,length(A),1))
がゼロを含まないことが保証されている場合A
、これは次のように簡略化できます。
B = sum(tril(repmat(A,length(A),1)).' == repmat(A,length(A),1));