1

私はmatlabの問題で立ち往生しています。行列で確率「i」の数「i」を選択するにはどうすればよいですか。これを行列で実行したいのですが、確率'i'で各行から数値'i'を選択します。

どんな助けでも大歓迎です

サンプルマトリックス(ゼロを選択する必要はありません):

    w1= .47;
    w2= .023;
    m1= .06;
    m2= .037;
    x=rand(1,m1)<=m1;
    tolerance= 0.01;

    Transition=[m1 w1 0  w1 0  0   0;
        0  m1 w1 0  0  0   0;
        0  0  m1 w1 0  0   0;
        0  0  0  m2 w2 0   0;
        0  0  0  0  m2 w1  w1;
        0  0  0  0  0  m1  w1
        0  0  0  0  0  0   m1];
4

2 に答える 2

1

それでは、ヒントから始めましょう。数値が1つだけ0.06で、ベクトル(=行列の1行)が必要な場合、この数値は分散している0.06ため、選択する可能性があります。簡単な解決策は、100個のゼロのベクトルから始めて、v=zeros(100,1)6つのランダムな位置に数値を置くことです0.06

ind=randi(100,1,6);
v(ind)=0.06;

それを1行に複数の数に拡張する方法を考えられますか?

于 2013-02-08T05:49:10.647 に答える
1

まず、Tc0から1の間のランダムな値を超える最初の列を見つける戦略の準備として、累積確率の行列を計算できます。

Tc = zeros(size(T));
Tc(:, 1) = T(:, 1);
for k = 2 : size(T, 2)
  Tc(:, k) = Tc(:, k - 1) + T(:, k);
end

各行から数値を描画するために、最初に描画してから、累積確率のバケットに分類されるp = rand(size(T, 2), 1)列を見つけます。p

for k = 1 : size(T, 1)
  col = find(T(k, :) > p(k), 1, 'first');
  if isempty(col)
    fprintf('nothing drawn for row %d\n', k);
  else
    fprintf('row %d, col %d, p = %f\n', k, col, T(k, col));
  end
end

順序は重要ではないため、これは機能します。たとえば、p = 0.2の場合、任意の累積分布が0.65から0.85に増加する可能性があります。randこの間隔で値を生成する確率は、実際には0.2です。これがの最後のゼロ以外のエントリである場合Trand数値が描画されない確率が0.15の値を返します。別の例では、のすべてのエントリTがゼロの場合、累積分布はで描画できるものを超えることはありませんrandrand最後の例では、それぞれ0.5に2つのエントリがある場合、累積分布は、いずれかの列で描画されたものを半分と半分超えます。

于 2013-02-08T06:01:08.987 に答える