2012-02-07 80 views
2

我有一个矩阵A,其维数为m X n。对于每一列ii > 0i <= n)我想翻转硬币并用概率p填充整个列中的0个值。这怎么能在MATLAB中完成?将列设置为0,概率为p

例如:

A = [1 2 3 4; 5 6 7 8]和p = 0.5可能导致 A'= [1 0 3 0; 5 0 7 0]

回答

4

可以使用函数rand()来生成均匀分布的随机数的数组,并使用逻辑索引,以选择colums其中该阵列为小于p:

A = [1 2 3 4; 5 6 7 8]; 
p = 0.5; 

A(:, rand(size(A,2), 1)<p) = 0 

A = 

    0  2  0  0 
    0  6  0  0 
1

您可以做一些像bsxfun(@times, A, rand(1, size(A, 2)) > p)。不过,亚历克斯的答案当然更好。