0

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

基本上,如果概率是 p,那么矩阵中的每个值都有 p 机会应用函数。

我已经完成了循环和函数本身,但我还没有找到如何实际应用概率本身。

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

4

3 回答 3

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
于 2013-05-10T12:19:10.423 回答
1

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

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

我想你可能不得不在这之后重塑 m ......不确定

M = reshape(M, m, n);
于 2013-05-10T11:47:33.297 回答
1

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

例如:

R = rand(m,n) < p

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

于 2013-05-10T11:55:55.630 回答