如何在MATLAB中将概率应用于单元格?

时间:2013-05-10 11:19:29

标签: matlab loops probability

今天只是一个简单的问题。如果我有一个m * n矩阵,我想循环遍历其中的每个值并应用基于概率的函数。

基本上,如果概率是p,那么矩阵中的每个值都有可能将函数应用于它。

我有循环和功能本身都已解决,但我还没有找到如何实际应用概率本身。

任何建议都将不胜感激!提前谢谢。

3 个答案:

答案 0 :(得分:3)

这是您的数据矩阵:

>> 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

答案 1 :(得分:1)

因此,我建议将您的函数应用于每个单元格,然后根据某些概率将值设置为默认值。因此,假设M是将函数应用于每个单元格的结果:

default = NaN % Or 0 or whatever
p = 0.8;
M(rand(size(M)) > p) = default;

我认为你可能不得不重塑这个......不确定

M = reshape(M, m, n);

答案 2 :(得分:1)

诀窍是你可以先生成随机数,然后应用其他公式。

例如:

R = rand(m,n) < p

现在R(row,col)的每个值都对应于处理原始matrix(row,col)所需的结果。