Matrix 如何使用rand()和特定比例的1创建二进制矩阵?

Matrix 如何使用rand()和特定比例的1创建二进制矩阵?,matrix,julia,Matrix,Julia,我正在建立我的数学模型,但现在我正在与 操纵数据 我想创建一个随机二元矩阵(0,1),其中1与总的比值等于某个特定值,如0.3。如何使用rand()函数实现这一点 在excel中,返回1的概率为0.2,您可以按照以下方式执行: = IF(RAND() < 0.2, 1, 0) =IF(RAND()

我正在建立我的数学模型,但现在我正在与 操纵数据

我想创建一个随机二元矩阵(0,1),其中1与总的比值等于某个特定值,如0.3。如何使用
rand()
函数实现这一点

在excel中,返回1的概率为0.2,您可以按照以下方式执行:

= IF(RAND() < 0.2, 1, 0)
=IF(RAND()<0.2,1,0)
带有理解列表 这样就可以了,我想你需要一个3x8矩阵:

function create_random_matrix(n::Int, m::Int)
           [rand() < 0.2 for _ in 1:n, _ in 1:m]
end

mymatrix = create_random_matrix(3,8)
或以类似方式使用:

没有把它放在函数中 不将其放入函数中:

mymatrix = [[rand() < 0.3 for _ in 1:3] for _ in 1:8]
使用位运算符 最后,您还可以使用:

mymatrix = rand(3, 8) .< 0.3
mymatrix=rand(3,8)。<0.3
这通常是一个简单的解决方案,返回的结果可能是您所需要的,也可能不是您所需要的。这也不方便创建不必要的数组

由于
由于@BogumiłKamiński和@DNF的评论,这个答案得到了改进。

或者,您可以使用发行版编写
,然后例如
兰德(伯努利(0.1),10,10)
发行版
应该是这里的首选方式。对于寻找类似解决方案的人来说更容易。编写
rand()<0.3有点奇怪?true:false
,因为这完全等同于
rand()<0.3
。你基本上写的是“如果A是真的,那么是真的,否则是假的”,而不仅仅是“A”。因此,将所有示例替换为
[rand()<0.3 for…]
和类似的解决方案。一个非常简单的解决方案是
mymatrix=rand(m,n)。<0.3
。它不必要地创建了一个额外的数组,但非常简单。它还返回一个
位数组
,它可能是您想要的,也可能不是您想要的。@DNF,谢谢您的评论,我根据您的建议编辑了我的答案:)
function create_random_matrix(n::Int, m::Int, prob::Float64)
      [[rand() < prob for _ in 1:n] for _ in 1:m]
end
mymatrix = [[rand() < 0.3 for _ in 1:3] for _ in 1:8]
#Using Pkg; Pkg.add("Distributions") #Uncomment if you didn't already install Distributions package
using Distributions
mymatrix = rand(Bernoulli(0.3), 3, 8)
mymatrix = rand(3, 8) .< 0.3