我正在建立我的数学模型,但是现在我正在努力 处理数据。
我想创建一个随机二进制矩阵(0,1),其中1与总数的比率等于某些特定值,例如0.3。我该如何使用rand()
函数呢?
在excel中,您将像下面这样进行操作,因为返回1的概率为0.2:
= IF(RAND() < 0.2, 1, 0)
答案 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的评论,此答案得到了改善。