我正在建立我的数学模型,但是现在我正在努力处理数据。
我想创建一个随机二进制矩阵(0,1),其中1与总数的比率等于某些特定值,例如0.3。我该如何使用rand()功能呢?
在excel中,您将像下面这样进行操作,因为返回1的概率为0.2:
= IF(RAND() < 0.2, 1, 0)
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题,我在这里假设您想要一个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函数:
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。
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |