Со списком понимания
Это должно сработать, здесь я предполагаю, что вам нужна матрица 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 и троичный оператор для более сложной матрицы
Вам может понадобиться 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
или аналогичным способом, используя троичный оператор :
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-мерного массива
Я предположил, что вы хотите, чтобы 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
пакет , сделать следующее:
#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.