【问题标题】:How to make in matlab three vectors with probabilities with a sum of one for each set?如何在matlab中制作三个具有概率的向量,每组的总和为一个?
【发布时间】:2014-12-03 17:00:35
【问题描述】:

我必须制作三个概率为 p1、p2 和 p3= (1-p1-p2) 的向量,以便绘制没有内存的信号源的熵,该信号源会产生三个符号。我用 rand() 和 [1: .001:1] 之类的向量尝试了很多东西,但没有一个按预期工作,主要问题是我不能为每组概率保持一个恒定的总和。有什么方法或功能可以做到这一点吗?任何建议都将不胜感激。

【问题讨论】:

    标签: matlab vector probability entropy


    【解决方案1】:

    您可以生成一个向量p,包含 0 和 1 之间的 3 个实数

    p = rand(1,3);
    

    然后规范化p

    p = p / sum(p);
    

    那么p(1) + p(2) + p(3) 是 1。

    编辑:

    回应 OP 的评论

    N = 100;
    
    p = rand(N, 3);
    for k = 1: N
        p(k,:) = p(k,:)/sum(p(k,:));
    end;
    

    现在您有一个 N x 3 矩阵,其中行总和为 1。我很确定有一种更“纯”的 MATLAB 方法可以使用一些矢量化技巧来编写循环,但是我的 MATLAB 现在有点生疏了,这可以。下次提问时请更准确。

    【讨论】:

    • 我要发疯了,因为使用了norm,但你更快了哈哈。做得好 ;)。 +1
    • @AnderBiguri 量子力学习惯使用norm :)
    • 感谢您的回复。我需要制作三个不同的向量 p1,p2 和 p3,每个向量有 100 列,而且每组的总和应该是 1 ( p1(1)+p2(1)+p3(1)= 1, p1(2)+p2 (2)+p3(2)=1 ) 以绘制熵与 p1、p2 和 p3 的关系。
    • @vsoftco 我认为您所指的“更纯粹的 Matñab 方式”是将循环替换为 p = bsxfun(@rdivide, p, sum(p,2));
    • 我赞成这一点,因为它似乎满足了这个问题,但无论如何都不是很清楚 :-) 但是如果希望 p均匀分布 (即所有值的可能性相同),这种方法不适合。见here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多