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

时间:2019-05-23 12:43:35

标签: matrix julia

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

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

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

= IF(RAND() < 0.2, 1, 0)

1 个答案:

答案 0 :(得分: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)

复杂的矩阵的三元运算符

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

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

或使用ternary operator的类似方法:

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

数组而不是二维数组

我在这里假设您想要一个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

不将其放入函数中

不将其放入函数中

mymatrix = [[rand() < 0.3 for _ in 1:3] for _ in 1:8]

有分配法则

您还可以使用Distributions package执行以下操作:

#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

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

感谢

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