Julia 中具有固定行总和的整数随机矩阵

Random matrix of Integers with fixed row sums in Julia

我想创建一个具有以下约束的随机矩阵:

我尝试创建一个随机矩阵并将其缩放到我想要的固定行总和,但后来我得到了浮点值的问题(四舍五入也无济于事)

A = rand(0:6, 5, 10)

sum_vec = [10,5,3,2,2]

for i = 1:length(A[:,1])
    # row sum 
    s = sum(A[i,:])
    A[i,:]  = (A[i,:] /s ) * sum_vec[i]
end

非常感谢您的帮助!

你还没有说你的随机数应该遵循什么分布, 所以我做了一些随意的选择。

这是一个示例函数,您可以使用它来生成您想要的内容,其中 n 是必须为 0 到 6 之间的整数的元素数,而 s 是它们所需的总和:

function fixed_sum_sample(n, s)
    s > 6*n || s < 0 && throw(ArgumentError("wrong arguments"))
    x = zeros(Int, n)
    options = Set(1:n)
    for _ in 1:s
        i = rand(options) # you might want something else than uniform sampling
        x[i] += 1
        x[i] == 6 && pop!(options, i)
    end
    return x
end