今日は簡単な質問です。m*n 行列があり、その中のすべての値を循環させて、確率ベースの関数を適用したい場合。
基本的に、確率が p の場合、行列の各値に関数が適用される可能性は p です。
ループと関数自体はすべてうまくいきましたが、実際に確率自体を適用する方法が見つかりませんでした。
どんなアドバイスでも大歓迎です!前もって感謝します。
今日は簡単な質問です。m*n 行列があり、その中のすべての値を循環させて、確率ベースの関数を適用したい場合。
基本的に、確率が p の場合、行列の各値に関数が適用される可能性は p です。
ループと関数自体はすべてうまくいきましたが、実際に確率自体を適用する方法が見つかりませんでした。
どんなアドバイスでも大歓迎です!前もって感謝します。
データマトリックスは次のとおりです。
>> X = reshape(1:9, 3, 3);
そして、(おそらく)次の関数をすべての要素に適用したい(行列を引数として取ることができるように、どのようにベクトル化したかに注意してください)
>> f = @(x) x.^2;
確率pで関数を適用したい
>> p = 0.25;
0 から 1 の間の乱数をいくつか生成し、どれがpより小さいかを確認します。
>> idx = rand(3,3) < p;
次に、関数を関連するインデックスに適用します
>> X(idx) = f(X(idx));
結果は次のとおりです。
>> X
X =
1 16 7
2 5 64
3 6 81
したがって、関数をすべてのセルに適用し、確率に基づいて値をデフォルト値に設定することをお勧めします。したがって、M が関数をすべてのセルに適用した結果であると仮定しましょう。
default = NaN % Or 0 or whatever
p = 0.8;
M(rand(size(M)) > p) = default;
この後、m を再形成する必要があるかもしれないと思います...よくわかりません
M = reshape(M, m, n);