比較的高次元 (100X500000) の行列 Q があり、それをダウンサンプリングしたいと考えています。ダウンサンプルで、例を挙げて説明します。
Q =
1 4 9
3 2 1
ダウンサンプル サイズ = n。sum(Q) = 20 個のボールの瓶から n 個のボールを描画したいと考えています。各ボールは、行列の異なるインデックス ペアに対応する 6 つの方法のうちの 1 つに色付けされています。Aの色のボールが1つ、Bの色のボールが4つ、というように、n個のボールを置き換えずに描いているようなものです。
マトリックスと同じ形式で返してほしい。戻り値の一例。たとえば、downsample(Q, 3) =
0 0 2
1 0 0
私のアプローチは、サンプルを使用しようとしています:
sample(length(as.vector(Q)), size=n, replace=FALSE, prob = as.vector(Q))
ただし、これの問題は、サンプルが 1:length(as.vector(Q)) を私が持っているすべてのボールと見なすため、長さ(as.vector(Q)) 以外のボールを描画できないことです。私のボールを交換します。
したがって、私の方法を適応させるには、このベクトルから 1 を減算して prob を更新し、何らかの for ループを使用してサンプルを 1 つずつ呼び出す必要があります。素敵なコードのようには聞こえません。
R に適した for ループの方法でこれを行うより良い方法はありますか?