【发布时间】:2014-12-03 17:00:35
【问题描述】:
我必须制作三个概率为 p1、p2 和 p3= (1-p1-p2) 的向量,以便绘制没有内存的信号源的熵,该信号源会产生三个符号。我用 rand() 和 [1: .001:1] 之类的向量尝试了很多东西,但没有一个按预期工作,主要问题是我不能为每组概率保持一个恒定的总和。有什么方法或功能可以做到这一点吗?任何建议都将不胜感激。
【问题讨论】:
标签: matlab vector probability entropy
我必须制作三个概率为 p1、p2 和 p3= (1-p1-p2) 的向量,以便绘制没有内存的信号源的熵,该信号源会产生三个符号。我用 rand() 和 [1: .001:1] 之类的向量尝试了很多东西,但没有一个按预期工作,主要问题是我不能为每组概率保持一个恒定的总和。有什么方法或功能可以做到这一点吗?任何建议都将不胜感激。
【问题讨论】:
标签: matlab vector probability entropy
您可以生成一个向量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
norm :)
p = bsxfun(@rdivide, p, sum(p,2));
p 值均匀分布 (即所有值的可能性相同),这种方法不适合。见here