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

所以让我们从一个提示开始。假设您只有一个数字0.06,并且您想要一个向量(= 矩阵中的一行),该数字是分散的,因此有0.06可能选择它。一个简单的解决方案是从一个 100 个零的向量开始,v=zeros(100,1)然后将数字放在 6 个随机位置0.06,即

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

您能想出一种方法将其扩展到每行多个数字吗?

于 2013-02-08T05:49:10.647 回答
1

首先,我们可以计算一个累积概率矩阵,Tc为找到第一列超过 0 到 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都为零,则累积分布将永远不会超过 可以绘制的rand。对于最后一个示例,如果在 0.5 处有两个条目,每个条目,累积分布将超过rand在任一列绘制的一半和一半。

于 2013-02-08T06:01:08.987 回答