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

aKo*_*rno 2 matrix julia

我正在建立我的数学模型,但是现在我正在努力处理数据。

我想创建一个随机二进制矩阵(0,1),其中1与总数的比率等于某些特定值,例如0.3。我该如何使用rand()功能呢?

在excel中,您将像下面这样进行操作,因为返回1的概率为0.2:

= IF(RAND() < 0.2, 1, 0)
Run Code Online (Sandbox Code Playgroud)

JKH*_*KHA 5

带有理解列表

这应该可以解决问题,我在这里假设您想要一个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)
Run Code Online (Sandbox Code Playgroud)

ifelse和三元运算符,用于更复杂的矩阵

如果您想要更复杂的东西,例如二进制以外的东西的矩阵,则可能需要ifelse函数

function create_random_matrix(n::Int, m::Int)
      [ifelse(rand() < 0.2, 10.0, -5.0+rand()) for _ in 1:n, _ in 1:m]
end
Run Code Online (Sandbox Code Playgroud)

或使用三元运算符的类似方式:

function create_random_matrix(n::Int, m::Int)
      [rand() < 0.2 ? 10.0 : -5.0+rand() for _ in 1:n, _ in 1:m]
end
Run Code Online (Sandbox Code Playgroud)

数组而不是二维数组

我在这里假设您要2-dimensional Array代表矩阵。您可能需要一个Array of Arrays代替:

function create_random_matrix(n::Int, m::Int, prob::Float64)
      [[rand() < prob for _ in 1:n] for _ in 1:m]
end
Run Code Online (Sandbox Code Playgroud)

没有将其放在函数中

不将其放在函数中:

mymatrix = [[rand() < 0.3 for _ in 1:3] for _ in 1:8]
Run Code Online (Sandbox Code Playgroud)

有分配法

您还可以使用Distributionspackage进行以下操作:

#Using Pkg; Pkg.add("Distributions") #Uncomment if you didn't already install Distributions package
using Distributions
mymatrix = rand(Bernoulli(0.3), 3, 8)
Run Code Online (Sandbox Code Playgroud)

使用按位运算符

最后,您还可以使用:

mymatrix = rand(3, 8) .< 0.3
Run Code Online (Sandbox Code Playgroud)

从符号上讲,这是一个简单的解决方案,并返回BitArray可能是或可能不是您需要的a。这也给创建不必要的数组带来了不便。

由于改善

感谢@Bogumi的评论,此答案得到了改善。卡米斯基(Kami?ski)和@DNF。